为什么有人说 "Builder Pattern" 比对 Fluent 接口使用扩展方法更好?

Why do some say the "Builder Pattern" is better than using Extension methods for Fluent interfaces?

在此讨论 (creating API that is fluent ) 中,一个响应表明构建器模式比使用扩展方法创建 Fluent 接口更好。

这可能是真的原因是什么?扩展方法遵循 SOLID 原则中的 "O"...我个人只使用扩展方法来开发 Fluent 界面,但想知道我是否需要重新考虑这个...

我想到的一件事是,扩展方法不被认为用于流畅的 API,而只是用于扩展类型的功能。

构建器模式需要更多的理解,它与柯里化、单子和函数式编程有关。

所以后者是一个更好的概念基础,可以翻译成多种语言,而前者是一种 C# 行话,在其他语言中可能没有对应物。

如果您使用两种方法获得相同的行为,您可以自由选择使用其中一种。但是,您还应该考虑您 need/want 的哪些特性:代码的表现力、可读性、可移植性、安全性、性能 都是两种选择之间可能存在差异的品质。

SO Question 描述了扩展方法的缺点。

此外 some 认为,扩展方法违反了 Open/Closed 原则而不是遵循它,因为它们以原始创建者可能未打算的方式引入功能。

如果 Builder Pattern 可以实现相同的目标而没有缺点,那么为什么不使用它呢。