如何只在某些实体组可以参与角色的情况下模拟复杂的角色关系?

Dan*_*ski 5 oop modeling model

假设我必须为餐馆的餐点建模.

一顿饭可以包含几个"组件":

  1. (薯条或米饭或楔子)
  2. AND(六种不同饮料中的一种)
  3. AND(七种不同酱中的一种或两种,或者根本没有)

另一餐可以包括:

  1. (沙拉或米饭)
  2. 和(大蒜或没有大蒜)

进一步的膳食可以包括:

  1. 只是炸薯条

  2. 只是一种饮料

  3. 只是......

我该如何建模呢?(UML,实体关系,代码,......无论你能解释得最好)

如果你知道我想要执行的一些任务,也许会有所帮助,所以:

  • 允许客户先选择餐点并显示所有剩余的"附加组件".
  • 从组件列表中检测膳食.例如,如果顾客订购了薯条,酱汁和饮料,则应该可以从第一个例子中检测出餐食.

我已经考虑将所有组件分成文章,然后添加某种角色映射来标记"薯条"作为"芝士汉堡","炸肉排","......"的补充,但后来我想知道,我怎么能模拟多个添加-ons,可选附加组件,n-out-of-m附加组件......

我希望你能帮帮我...

mar*_*rkt 1

如果这是家庭作业,可能并不重要......但是 - 如果这要在现实世界的应用程序中使用,我强烈建议不要为每种食物使用具体的类,即。可乐类、沙拉类、米饭类等如上面推荐。这肯定会使您的应用程序变得不灵活。

如果有一个带有名称属性或类似属性的食品类和饮料类会更好。

想象一下,仅仅因为现在有一个新的特殊产品或食品,就必须重建整个应用程序......不酷;)。

我认为其他答案中缺少的是团体的想法。每个食物项目可以与其他项目一起属于一个组,或者单独属于一个组。

假设薯条、米饭和楔子属于 A 组。饮料属于 B 组。然后您可以将组合建模为组列表 - 即。1 个 A 组项目和 1 个 B 组项目,或 2 个 A 组项目和 1 个 B 组项目。

您还可以使食品能够同时属于多个组......以使选项更加灵活。

数据库模型定义所有关系可能会变得复杂,但我认为这是必要的。

也许是这样的:

group(id, name, desc) - 一组类似的食物 - 主菜、开胃菜、饮料......或任何东西

foodItem(id, name, desc)- 代表单个项目 - 薯条、米饭等。

foodItem_group(foodIgem_Id, group_Id)- 将食品项目映射到其组 - 多对多

combo(id, name, desc)- 描述一个组合

combo_group(combo_Id, group_Id)- 将组映射到组合 - 多对多

我认为这可以用于表示基本所需的模型 - 您可能需要额外的表来存储客户实际订购的内容..当然,检测客户订单是否与组合匹配由您的业务逻辑决定。