如何在MVC模式中表示域聚合?

时间:2009-01-17 00:58:14

标签: model-view-controller domain-driven-design aggregates

我应该为聚合中的每个对象创建一个单独的类,还是应该将对象作为单个聚合类的嵌套类?

3 个答案:

答案 0 :(得分:2)

如果聚合对象是可分离的,即它们可以单独出现,也可以在聚合中出现,那么每个对象都有一个单独的类,并使用类型集合来表示聚合。

答案 1 :(得分:2)

这取决于对象与其包含的对象的紧密耦合程度。如果您有一个Person类,并且该人拥有零到多个电话号码,您通常希望PhoneNumber是一个单独的类,因为许多不同类型的对象可能有电话号码(例如企业,学校等) )。但是如果对象是自然紧密耦合的东西,例如Person对象可能有Toes,那么内部类可能有意义。

您可能想要问自己的一些问题是: 1.聚合对象是否需要访问包含类的私有部分?如果是这样,内部阶级是一个不错的选择。 2.聚合对象是否总是属于一个对象,它所属的对象永远不会改变?如果没有,那么你可能不想要一个内部类。 3.聚合对象在聚合对象的上下文之外是否有意义?如果是这样,它可能不应该是一个内部阶级。

如果有疑问,通常最好使用单独定义的类,如果没有其他原因它会保持耦合并且源文件更小。

也不是说它不一定是一个或两个问题。您始终可以定义单独的类或接口,然后在聚合类中继承/实现它。

答案 2 :(得分:1)

不确定MVC与域聚合有什么关系,因为可以在没有UI的情况下使用后者。

我通常更喜欢将聚合的各个部分放在一起,因为这些部分可以自己具有商业意义。当必须在内部类之前加载外部类或者不能使内部类公开时,嵌套类才有意义(至少这些内容适用于Java)。