代码之家  ›  专栏  ›  技术社区  ›  gizmo

链式方法的优点和缺点?

  •  8
  • gizmo  · 技术社区  · 16 年前

    我真的很喜欢锁链方法的哲学,比如 jQuery 重点在图书馆。我觉得它很优雅,很清晰。

    主要是Java开发人员,我一直想知道为什么这种实践在这个语言中不再被使用。例如,收集接口不是以这种方式设计的(用于添加/删除方法),我发现这非常令人难过。

    有没有真正的反对这种做法的理由,还是仅仅是一些“性吸引力”不够的东西?

    7 回复  |  直到 16 年前
        1
  •  0
  •   David Medinets doug    16 年前

    Martin Fowler将此主题作为“流畅的界面”在 http://www.martinfowler.com/bliki/FluentInterface.html . 一个主要问题是,Fluent接口是为人类设计的,因此像Spring这样的框架无法理解它们。简单地使用一个流畅的接口在某种意义上提供了可维护性(可读性),但在另一个意义上却失去了可维护性(灵活性)。

        2
  •  3
  •   leppie    16 年前

    在我看来,调试是很痛苦的,因为您往往没有用于检查的中介变量。

        3
  •  2
  •   LBushkin    16 年前

    可链接方法和继承有一个常见的问题。假设您有一个类C,其方法f1()、f2()等返回一个c。当您从c派生类d时,您希望方法f1、f2等现在返回一个d,这样D的可链接方法就可以在链中的任何位置调用。

        4
  •  1
  •   chessguy    16 年前

    我也很喜欢这种方法。我能想到的唯一缺点是,在每个方法的末尾“返回这个”有时似乎有点尴尬。例如,对于jquery,允许插件有些尴尬,因为您必须说“确保不要忘记您的退货!但是在编译时没有好的方法来捕获它。

        5
  •  1
  •   Robert Gould    16 年前

    唯一的缺点是松动了返回类型,所以链接对于执行操作很好,但对于计算操作不好。

    另一个问题是,对于链接,编译器不能像确定内联的简单函数调用那样容易。但正如我所说的,如果您的链接执行操作,而不是计算,那么编译器很可能不会以任何方式更改任何内容。

        6
  •  0
  •   PhiLho    16 年前

    javascript是(或多或少)一种功能性语言,具有一流公民的功能。
    向对象添加/删除方法、将函数作为参数传递,这一切对于这种语言来说都是自然的。

    另一方面,Java是严格的OO,函数不能存在于类之外。使用继承、组合和接口是这种语言更自然的方式。

        7
  •  0
  •   Jonathan Rupp    16 年前

    在我们的设计工具包中,可链接方法是另一个很好的工具。只要确保你不会碰到“我有锤子,所以每个问题都是钉子”的设计混乱。

    每一个设计问题都不能用链式方法来解决。有时它确实有助于使界面更易于使用(例如,您提到的收集问题)。有时候不是,关键在于找出哪种情况适用。