什么是正确的域模型?

What is the correct domain model?

我是面向对象设计模式的新手。我对域模型有一个基本的概念。但是,我陷入了以下问题。问题是我有一个包含事件和客户(均为 1....*)的系统。此外,事件包含包。允许用户预订活动。但是,他必须通过预订包含在活动中的包裹来做到这一点。给定情况的正确域模型应该是什么。我对类似的问题做了很多研究,但找不到合适的答案。

我的猜测: 1)

在此图中,客户可以预订活动,但我不确定这一点,因为客户预订的是包含在活动中的套餐。我应该 select 给定系统的这个域模型吗?它很直观,因为它允许客户预订活动。

2)

在此图中,域模型表示系统的结构。但是,客户只能通过活动获得包裹。因此,我不确定这个领域模型。当包裹包含在活动中时,客户如何预订包裹。

请建议哪个领域模型是正确的。我是初学者所以请提供一个很好的解释。谢谢你帮我!

首先——没有确定的答案。通常您可以通过多种不同的方式进行创作并获得良好的效果。

其次-我认为两者都包含关系应该是聚合。事件到系统(可能)是一个复合聚合,而事件包可以是复合的(如果特定的包仅特定于一个事件)或共享的(如果同一包可通过各种事件使用)。

现在进入正题。如果 Event 和 Package 之间的关系是一个组合(复合聚合),那么您可以将书籍关系建模为 Customer 和 Package 之间的关联。然后事件是唯一可识别的。您还可以扩展您的模型,添加与派生事件(来自书籍)的关系。

这是一个示例(注意 / 符号表示这是派生关联):

对事件和包之间的复合聚合和共享聚合均有效的其他选项是对客户和事件之间的图书关系建模,但将其建模为关联 class。然后你有一个描述关联的 class(书籍),这个 class 可以有一个关系 chosenPackage 到 Package。 在这种情况下,您的模型将如下所示:

我敢打赌,您还可以找到其他仍然有效的问题建模方法,并显示您目前提供的所有信息。