我是面向对象设计模式的新手。我对域模型有一个基本的了解。但是,我遇到了以下问题。问题是我有一个包含事件和客户的系统(都是...... ....)。此外,事件包含包。允许用户预订活动。但是,他必须通过预订活动中包含的包来完成。什么应该是给定情况的正确域模型。我做了很多关于类似问题的研究,但找不到合适的答案。
在此图片中,客户可以预订活动,但我不确定这是因为客户正在预订活动中包含的套餐。我应该为给定系统选择此域模型吗?它很直观,因为它允许客户预订活动。
在此图像中,域模型表示系统的结构。但是,客户只能通过活动到达包裹。因此,我不确定这个域模型。当客户包含在活动中时,客户如何预订包裹。
请建议哪个域名模型正确无误。我是初学者所以请提供一个很好的解释。谢谢你帮助我!
答案 0 :(得分:2)
首先 - 没有明确的答案。通常,您可以通过多种不同的方式创建并获得良好的结果。
其次 - 在我看来,两者都包含关系应该是聚合。系统事件(可能)是一个复合聚合,而事件包可以是复合的(如果特定的包仅针对一个事件)或共享(如果通过各种事件可以使用相同的包)。
现在回答主要问题。如果Event和Package之间的关系是一个组合(复合聚合),那么您可以将书籍关系建模为Customer和Package之间的关联。然后事件是唯一可识别的。您还可以扩展模型,添加与派生事件的关系(来自本书)。
对Event和Package之间的复合和共享聚合有效的其他选项是对Customer和Event之间的Book关系建模,但将其建模为关联类。然后你有一个描述关联的类(Book),这个类可以有一个关系selectedPackage to Package。 在这种情况下,您的模型将如下所示:
我敢打赌,您还可以找到其他方法来建模仍然有效的问题,并显示您目前提供的所有信息。