在此讨论中(creating API that is fluent),响应表明Builder模式比使用Extension方法创建Fluent接口要好。
这可能是什么原因?扩展方法遵循" O"在SOLID原则中......我个人只使用Extension方法开发Fluent接口,但我想知道是否需要重新考虑这个......
答案 0 :(得分:5)
此SO Question描述了扩展方法的缺点。
此外some认为,扩展方法违反了开放/封闭原则而不是遵循原则,因为它们以原始创作者可能无法想象的方式引入功能。
如果Builder Pattern实现了相同的目标而没有缺点,那么为什么不使用它呢。
答案 1 :(得分:2)
我想到的一件事是,扩展方法不被认为用于流畅的API,而只是用于扩展类型的功能。
构建器模式需要更多的理解,与currying,monads和函数式编程有关。
所以后者是一个更好的概念基础,可以翻译成许多语言,而前者是一个C#语言,可能没有其他语言的对应语言。
如果您使用这两种方法获得相同的行为,则可以自由选择使用。但是你还应该考虑你需要/想要哪些功能:表现力,可读性,可移植性,安全性,性能代码都是两种选择之间可能不同的品质。