【发布时间】:2014-01-24 09:59:58
【问题描述】:
我之前听说过多重继承的陷阱,我知道 .Net 开发人员反对将其包含在内。
话虽如此,请考虑一个简单的示例,例如“游戏公司”。游戏公司可以是:
- 软件开发人员,如Platinum Games
- 发布者,例如Agetec
- 同时是开发者和发布者,如Blizzard Entertainment
- 仅限游戏硬件制造商(手头没有仅是制造商的公司示例)
- 以上所有,即Nintendo
如果我必须在 .Net 中对此进行建模,我将如何处理存在“is a”关系并且一家公司可以同时是多个这样的事实?想象一下,我已经建模了一个:
-
Game类,具有List<Developer>和Publisher作为属性 -
具有
Manufacturer属性的Console类。
在理想情况下,这应该是尽可能安全的类型,并且易于过滤和导航到每个类(如各种类型的完全连接的实体框架映射)。
我想到了同样的事情,我可能知道“正确”的答案。
如果我将FatPerson 和TallPerson 作为基类并想“解决”多重继承限制怎么办?因为很有可能同时拥有一个又胖又高的人。在这种情况下,如果单个Person 有两个属性Weight 和Height,那么它可能会更简洁,完全消除基类。只需重写我之前基于对象类型进行的任何过滤以考虑这些新属性。
对于每个多重继承情况,是否存在与此等价的东西?对于我提出的这个特殊情况呢?
更新:
我已阅读标记为与我重复的答案(在发布此答案之前),但我在这里略有不同。我认为这与将 SQL 优化问题标记为所有其他 SQL 优化问题的重复是一样的。最后,每个案例都是不同的案例,需要不同的方法/答案。我认为这适用于这里,因为我询问了一个非常固定的案例,就像其他答案一样。
【问题讨论】:
-
也许我不明白。您的解决方案是:如果您不继承,那么您将不会拥有多重继承?无论如何......有什么问题?
-
您概述的特定情况没有定义任何需要多重继承的东西。例如,暴雪,你可以只有两个对象,BlizzardDeveloper 和 BlizzardPublisher。拥有一个对象同时继承 Developer 和 Publisher 有什么好处?
-
如果您使用属性,即使使用提供它的语言,您也可以避开 MI,所以是的。真正的问题是您是否需要诸如 Publish 之类的方法,在这种情况下,如果实体实现了接口 IPublish,您会眯着眼睛说实体是发布者
-
大公司创建部门以保持公司的可管理性。在软件中称为“封装”。
-
Titles.Where(x => x.Publisher_ID = this.ID),已连接。您的部分问题是您正在研究如何通过继承来实现它,而不是我需要什么来实现它。要使用继承锤所以这必须是一个钉子......
标签: .net inheritance data-modeling multiple-inheritance