torokhkun Asked:2020-08-21 17:11:44 +0000 UTC2020-08-21 17:11:44 +0000 UTC 2020-08-21 17:11:44 +0000 UTC 作品。容器和可组合对象的相互存在 772 从组合的定义来看——“一个包含的(可组合的)对象只能作为容器的一部分存在。如果容器被销毁,那么包含的对象也将被销毁。 问题如下。我们有一个家庭班,它由丈夫、妻子和孩子三个班级组成。 Family 是否可以存在一组不完整的可组合类,或者它们都应该是强制性的(例如,只有 Husband 和 Wife,或只有 Wife 和 Child)? 是否可以在容器对象被销毁之前销毁任何可组合类的对象,或者只要容器对象存在,可组合对象就必须存在?不是在创建容器对象的那一刻创建,而是稍后,例如,当某些情况发生时? ооп 1 个回答 Voted Best Answer Artur Panteleev 2020-08-22T19:24:31Z2020-08-22T19:24:31Z Family 是否可以存在一组不完整的可组合类,或者它们都应该是强制性的(例如,只有 Husband 和 Wife,或只有 Wife 和 Child)? 这取决于您的域的逻辑,因此也取决于您的应用程序的代码。如果应用程序允许不完整的家庭存在,那么当然可以,如果不允许,则不可以。但就其本身而言,组合的使用并没有对此施加任何禁止。 是否可以在容器对象被销毁之前销毁任何可组合类的对象,或者只要容器对象存在,可组合对象就必须存在?不是在创建容器对象的那一刻创建,而是稍后,例如,当某些情况发生时? 同样,限制仅在主题领域(而不是在构图中)。家庭改变可能吗?它的个别成员有可能死亡吗?在您的应用中,单亲家庭会被视为家庭吗? 在家庭示例中,使用聚合而不是组合更合适。换句话说,聚合对象(族成员)必须在聚合(族)对象之外创建。它们必须从外部传递给它(构造函数、赋值、向集合中添加元素)。因此,它们可以(并且应该)存在于聚合对象之外。但是,您需要再次关注主题领域及其逻辑。 总结:在组合中,容器管理可组合对象的生命周期,可以根据其逻辑创建/不创建/销毁/动态替换它们。有了组合,“容器”可以在没有内容的情况下存在,但内容(例如家庭成员)不能没有容器而存在并随着它“消亡”。
这取决于您的域的逻辑,因此也取决于您的应用程序的代码。如果应用程序允许不完整的家庭存在,那么当然可以,如果不允许,则不可以。但就其本身而言,组合的使用并没有对此施加任何禁止。
同样,限制仅在主题领域(而不是在构图中)。家庭改变可能吗?它的个别成员有可能死亡吗?在您的应用中,单亲家庭会被视为家庭吗?
在家庭示例中,使用聚合而不是组合更合适。换句话说,聚合对象(族成员)必须在聚合(族)对象之外创建。它们必须从外部传递给它(构造函数、赋值、向集合中添加元素)。因此,它们可以(并且应该)存在于聚合对象之外。但是,您需要再次关注主题领域及其逻辑。
总结:在组合中,容器管理可组合对象的生命周期,可以根据其逻辑创建/不创建/销毁/动态替换它们。有了组合,“容器”可以在没有内容的情况下存在,但内容(例如家庭成员)不能没有容器而存在并随着它“消亡”。