根据 Fowler 和 Evans的规范文档,我正在尝试实现复合规范模式。
第一印象,我认为isGeneralizationOf
联合和析取的实现会有所不同。
特别是,我认为合取的逻辑是
(1) 令 specX 为 specA 和 specB 的合取。那么,只有当 specA 和 specB 都是 specC 的泛化时,specX 才是 specC 的泛化。
我认为析取的逻辑是
(2) 令specY 为specA 和specB 的析取。然后,如果 specA 或 specB 是 specC 的泛化,则 specY 是 specC 的泛化。
但是,在文档的第 16 页,他们展示了这种方法:
CompositeSpecification >> isGeneralizationOf: aSpecification
"True if each component is subsumed. False if any component is not subsumed."
^ (self components contains:
[:each |(each isGeneralizationOf: aSpecification) not ]) not
我在(1)和(2)中的推理是否正确?如果错了,那是为什么呢?如果它是正确的,那么作者为什么要定义一个方法来同时被合取和析取规范继承呢?他们在这里的意图是什么?