用值对象链接的方法

Ste*_*ini 4 design-patterns method-chaining value-objects

在值对象上使用方法链接模式是否可接受/良好实践(比如,返回一个新对象而不是这个)?是否存在实施此解决方案的案例?

我想不出任何弊端,但我想听听你的观点.

Gru*_*eck 5

结论:这种做法完全可以接受.

我相信这通常是你有一个不可变对象时发生的事情.不是改变原始对象,而是使用给定值创建一个新对象并返回.支持和反对使用方法链接执行此操作的参数与使用可变对象和不可变对象大致相同.

我唯一担心的是,这对于类的调用者来说是清楚的 - 他们不能依赖于与链接对象的身份相等性,并且必须明确调用不会改变原始对象.虽然如果它们实际上是在联系呼叫,但它们不会分配中间对象,因此不会有太大的风险.重要的是它们使用方法链中的最后一个对象.

以java.lang.String为例,String的客户端执行此操作:

myString.trim().replace("a", "b").substring(3, 9);
Run Code Online (Sandbox Code Playgroud)

...什么都不是,通常表示程序员误解.他们应该做的是:

String myNewString = myString.trim().replace("a", "b").substring(3, 9);
Run Code Online (Sandbox Code Playgroud)

......然后myNewString在后续操作中使用.有趣的是,Java的静态分析工具Findbugs可以检测到这种误解的实例,并将其报告为可能的错误.

客户理解是主要案例.其他缺点包括如果值对象创建起来非常昂贵,那么在每个链上创建一个新对象将会受到性能影响.您应该能够从自己的场景中判断出这可能是一个问题.在这种情况下,您可能希望实现Builder模式,而不是在每个方法链上创建新对象.

除此之外,我想不出任何其他问题.