来自DDD:解决软件核心的复杂性(第268页):
如果实现者具有在计算中使用的状态,那么 实现者实际上是一个操作的参数,所以 参数和返回值应该与 实施者。这样的操作在一组实例下关闭 那种类型。
a)我理解制作相同类型的参数,返回值和实现者会简化对操作的解释,但是作者建议即使从概念上来说,参数和返回值与实现者不是同一类型(比如ImplType
)更有意义,我们仍然应该尝试强迫他们ImplType
,即使这意味着我们必须牺牲一点概念清晰度?
b)我的想法是,如果参数和返回值更有意义为ImplType
类型,那么我们已经将它们定义为即使我们对关闭运营及其好处一无所知。难道我们最初使它们成为不同类型的事实不应该表明它在概念上更好,它们不属于ImplType
类型吗?
谢谢
答案 0 :(得分:12)
我认为关于操作关闭的关键引用是:
适合的地方,定义一个返回类型相同的操作 其论点的类型。
这个想法是关闭操作对行为建立了一些理想的限制,但它应该适用于适合的地方。关于将状态视为操作参数的实现者的声明基于如何实现OOP。在后台,运行时将初始化的 this 参数传递给所有类方法。这样,实现操作的每个方法都可以看作是接受实现类型作为第一个参数的静态方法。以这种方式查看操作会尝试使所有内容显式化,从而减少依赖性。
关闭操作的概念特别借鉴了数学,抽象代数和群论。在数学中,作为一个纯粹的声明模型,这个原则在企业开发中有很多应用,但是我们仍然可以从中获得一些好处。