做电子书网站 赚钱,怎么制作小程序卖东西,成都网站开发多少钱,网站空间知识xml不利于调试流畅的界面 #xff08;最初由Martin Fowler 创造#xff09;是一种与OOP中的对象进行通信的非常便捷的方式。 它使他们的外墙更易于使用和理解。 但是#xff0c;它破坏了它们的内部设计#xff0c;使它们更难以维护。 Marco Pivetta在他的博客文章Fluent In… xml不利于调试 流畅的界面 最初由Martin Fowler 创造是一种与OOP中的对象进行通信的非常便捷的方式。 它使他们的外墙更易于使用和理解。 但是它破坏了它们的内部设计使它们更难以维护。 Marco Pivetta在他的博客文章Fluent Interfaces is Evil中说了几句话 现在我加几分钱。 唐尼·布拉斯科1997 让我们看一下我自己的库jcabi-http 它是几年前创建的当时我认为流畅的接口是一件好事。 这是您使用库发出HTTP请求并验证其输出的方式 String html new JdkRequest(https://www.google.com).method(GET).fetch().as(RestResponse.class).assertStatus(200).body(); 这种便捷的方法链接使代码简短明了对吧 是的表面上确实如此。 但是库类的内部设计包括您看到的JdkRequest远远不够优雅。 最大的问题是它们很大而且 难 无法扩展它们而不扩大它们。 例如现在JdkRequest具有方法method() fetch()和其他一些方法。 需要新功能时会发生什么 唯一的添加方法是通过添加新方法来扩大类的范围这是我们危害其可维护性的方式。 例如 在这里 我们添加了multipartBody() 在这里我们添加了timeout 。 在jcabi-http中收到新功能请求时我总是感到害怕。 我知道这很可能意味着向Request Response和其他已经膨胀的接口和类添加新方法。 我实际上试图在库中做一些事情来解决这个问题但这并不容易。 查看此.as(RestResponse.class)方法调用。 它所做的是用RestResponse装饰一个Response 以使其方法更丰富。 我只是不想让Response包含50多种方法就像许多其他库一样。 这是它的作用这是伪代码 class Response {RestResponse as() {return new RestResponse(this);}// Seven methods
}
class RestResponse implements Response {private final Response origin;// Original seven methods from Response// Additional 14 methods
} 如您所见我没有将所有可能的方法添加到Response 而是将它们放置在补充修饰符RestResponse JsonResponse XmlResponse 等中 。 它有帮助但是要使用Response类型的中心对象编写这些装饰器我们必须使用“ ugly”方法as() 该方法as()很大程度上依赖于Reflection和类型转换 。 流利的接口意味着大型类或某些丑陋的解决方法。 换句话说流畅的接口意味着大型类或某些丑陋的解决方法。 当我写有关Streams API和接口Stream的文章时 我曾提到过这个问题。 有43种方法 这是流畅接口的最大问题-它们迫使对象很大。 流利的接口非常适合其用户因为所有方法都在一个地方并且类的数量非常少。 它们很容易使用尤其是在大多数IDE中使用代码自动完成功能时。 它们也使客户端代码更具可读性因为“流利的”结构看起来类似于纯英语aka DSL 。 没错 但是它们对对象设计造成的损害是价格过高。 有什么选择 我建议您改用装饰器和智能对象 。 如果现在可以做的话这就是我设计jcabi-http的方法 String html new BodyOfResponse(new ResponseAssertStatus(new RequestWithMethod(new JdkRequest(https://www.google.com),GET),200)
).toString(); 这与上面的第一个代码段中的代码相同但是它更加面向对象。 当然此代码的明显问题是IDE无法自动完成几乎所有操作。 同样我们将不得不记住许多类的名称。 对于那些习惯了流利界面的人来说该结构看起来很难阅读。 此外它与DSL的想法相距甚远。 流畅的界面对用户有利但对开发人员不利。 小对象对开发人员有好处但难以使用。 但是这里是好处列表。 首先每个对象都很小非常有凝聚力并且它们都是松散耦合的这在OOP中是显而易见的优点。 其次向库中添加新功能就像创建新类一样容易。 无需接触现有课程。 第三由于类很小因此简化了单元测试。 第四所有类都是不可变的这在OOP中也很明显 。 因此有用性和可维护性之间似乎存在冲突。 流利的界面对用户有利但对库开发人员则不利。 小对象对开发人员有好处但难以理解和使用。 似乎是这样但前提是您已习惯大型类和过程编程。 对我来说大量的小班学习似乎是一种优势 而不是缺点。 即使我不知道确切的哪个类最适合我内部清晰简单且易读的库也更容易使用。 即使没有自动完成代码我也可以自己解决因为代码很干净。 另外我经常发现自己对在代码库内部或通过对库的拉取请求扩展现有功能感兴趣。 如果我知道所引入的更改是孤立的并且易于测试那么我对此更感兴趣 。 因此我再也没有流畅的界面只有对象和装饰器。 翻译自: https://www.javacodegeeks.com/2018/03/fluent-interfaces-are-bad-for-maintainability.htmlxml不利于调试