什么是正确的域模型?

时间:2016-06-03 06:10:32

标签: oop design-patterns uml domain-model

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

我的猜测: 1)

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

2)enter image description here

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

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

1 个答案:

答案 0 :(得分:2)

首先 - 没有明确的答案。通常,您可以通过多种不同的方式创建并获得良好的结果。

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

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

这是一个例子(注意/符号描述这是一个派生的关联): derived association

对Event和Package之间的复合和共享聚合有效的其他选项是对Customer和Event之间的Book关系建模,但将其建模为关联类。然后你有一个描述关联的类(Book),这个类可以有一个关系selectedPackage to Package。 在这种情况下,您的模型将如下所示: association class

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