问题描述
学生每天在自助餐厅点菜,他们可以选择今天的完整菜单(例如汤,三明治,甜点,饮料),也可以选择菜单中的某些菜肴(例如汤) )。
如何在类图上显示它。这是我的图。订单和菜单或订单和餐具之间应该有关系吗?
解决方法
订单和菜单或订单和餐具之间应该有关系吗?
如果您只在 Order 和 Menu 之间建立联系,那么您将无法知道学生不想要哪种菜肴,因此,如果您具有这种联系,还需要另一个关系指示(不需要的)膳食,但是具有该附加关系会使 Order 和 Menu 之间的关系无效。
因此 Order 和 Meal 之间有关系,但 Order 和 Menu 之间没有(直接)关系
除此之外:
-
ordersType 是否有用?另外,由于枚举项始终存在,因此对其进行构图是没有意义的
-
一个 Menu 与几个 Meal 相关,因此对应的多重性必须为
1..*
-
一个 Pupil 可以有多个 Order (多重性*),因此看来 Menu 的几个实例可以存在同时,膳食可以是几个 Menu 的一部分,因此相应的多重性也必须是
1..*
。 -
膳食的价格是 int ,似乎很奇怪
-
菜单 / 订单的日期是 double ,似乎也很奇怪
-
Pupil 的 numClass 是 string ,如果 num 表示数字,则很奇怪>
为补充Bruno的出色回答,我想补充一下,您的要求非常模棱两可。例如:
- 学生可以享用全部菜单和其他项目(例如第二甜点)吗?
- 一个学生可以多次免费品尝同一项目吗?
- 在完整菜单中购买还是单独购买,商品价格是否相同? 真的有商品价格吗?还是以菜单价格为准?
- 菜单是否完全指定包含的餐点,还是学生必须说出他/她想要哪种汤或三明治?
- 非完整菜单是否也由菜单实例表示(例如,是否有完整菜单,仅含汤和三明治的便餐等)?
根据您的答案,有很多方法可以对此进行建模。例如:
- 如果菜单仅是一种选择商品的手段,而对商品价格没有任何影响,则您无需在订单中对菜单进行任何引用。
- 如果菜单是无法更改的自包含产品列表,或者菜单是允许用户创建个性化菜单的模板,则无需在订单中引用均值。
- 在其他情况下,您可能需要同时引用商品和菜单(如果允许没有菜单价格条件的多余商品)
- 为了获得最大的灵活性,您可以根据composite pattern设计菜单,该菜单可以像订单中的其他任何项目一样将其作为一个项目(带有价格)进行处理,尽管它由几顿饭。请注意,虽然非常漂亮,但会增加一些复杂性。