1

来自 DDD:解决软件核心的复杂性(第 268 页):

如果实现者具有用于计算的状态,那么实现者实际上是操作的参数,因此参数和返回值应该与实现者的类型相同。这样的操作在该类型的实例集下是关闭的。

a)我知道制作相同类型的参数返回值实现者会简化对操作的解释,但作者是否建议即使从概念上讲,参数返回值不属于同一类型(比如ImplType)更有意义作为实现者,我们仍然应该尝试强迫它们成为ImplType,即使这意味着我们必须牺牲一点概念上的清晰性?

b) 我的想法是,如果参数返回值的类型更有意义,那么我们已经将它们定义为这样,即使我们对操作闭包及其好处ImplType一无所知。我们最初使它们具有不同类型的事实不应该表明在概念上它们不是类型更好吗?ImplType

谢谢

4

1 回答 1

12

我认为关于关闭操作的关键引用是:

在合适的地方,定义一个返回类型与其参数类型相同的操作。

这个想法是操作的关闭对行为建立了一些理想的限制,但它应该应用在它适合的地方。关于将状态视为操作参数的实现者的声明是基于 OOP 的实现方式。在幕后,运行时将初始化的this参数传递给所有类方法。这样,每个实现一个操作的方法都可以看作是一个静态方法,它接受实现类型作为第一个参数。以这种方式查看操作试图使有关它的所有内容都变得明确,从而减少依赖关系。

运算闭包的概念是专门从数学、抽象代数和群论中借来的。在数学中,作为一个纯粹的声明模型,这个原理比在企业开发中的应用要多得多,但是我们仍然可以从中获得一些好处。

于 2013-02-05T19:48:22.440 回答