我一直致力于整理一个电子商务网站的粗略概念模型,该网站基本上允许用户转售音乐会门票。它纯粹是概念性的,而不是我实际制作的东西!
无论如何,我已经整理了一个域名模型,我希望得到一些反馈。我之前已经制作了类模型并对数据库进行了建模,但发现很难区分它们。
我已经看到很多东西都被富有和贫血所淹没,我相信我的模型是贫血的。只是注意到更多的行为会让它变得富有吗?
我的关系是否正确?我是否正确使用了我的聚合和合成?
我希望有任何改进建议。
提前致谢。
答案 0 :(得分:2)
您有正确的想法,但有些UML不正确,(商业)域模型不应该有用户。
我看到的一些问题示例:
我会从概念模型中删除合成和聚合。否则,我不认为它是一个概念模型的贫血。下一步是将行为添加为OOA模型并从中生成一些代码。请参阅Leon Starr的How to Build Articulate UML Models文章以获取更多帮助。
答案 1 :(得分:1)
正如吉姆所说,你并不完全清楚组合和聚合的工作方式。这个例子可能会有所帮助。 Tom Pender(" UML Bible"的作者)在他的课程中使用它。
假设你有一家汽车制造厂并且你制造汽车。汽车有发动机。要成为一辆汽车,它必须有一辆;如果你还没把它放进去,那还不是一辆车。而且,发动机也是汽车的一部分。拥有发动机的唯一原因是将其放入车内。因此,发动机没有独立于汽车的身份或寿命。这个组成。
现在,假设你有一个垃圾场。许多年后,同一辆车。你可以出售汽车上的任何物品,它仍然是那辆车。如果你卖掉发动机,汽车将是没有发动机的汽车。那是聚合。
因此,在制造环境中,汽车是零件的组合,而在垃圾场环境中,汽车是零件的集合。关键在于,在构图中,零件的使用寿命与汽车的使用寿命有关,而且在聚合时,它不是。
查看您的Ticket对象,我会说Venue和Artist与它有一个组合关联。虽然场地和艺术家当然不依赖于他们存在的票,但你必须记住背景。你正在做电子商务。您的艺术家和您的场所通过门票与电子商务系统互动,而不是以任何其他方式。所以组成。另一方面,门票肯定不是由订单组成的。如果是这样的话,就不会有无序的票!因此,票证和订单具有简单的关联,而不是聚合或组合。
对于您的出价人和卖家,他们是用户。所以你的继承箭头倒退了。如果投标人和卖方具有彼此独立的专门用户行为(例如,#34; OfferBid"和" AcceptBid"),则需要将它们建模为User类的特化。如果他们不这样做,那么他们只是两个扮演不同角色的用户,可以这样建模。