使用组合而不是继承可以使用哪些方法?

时间:2010-10-16 19:39:13

标签: oop inheritance composition

我有一个带有Quotations控制器的Web应用程序(在ASP.NET MVC中)。该控制器可以处理多种报价类型,MotorQuotation,PropertyQuotation等......

目前,它正在使用继承(即引用模型及其子项)来对域进行建模。各种子类在存储的数据中存在差异,而不是它们的行为。行为的差异将来自其验证方法,因为验证可能会有所不同,具体取决于子类可能存储的唯一字段。

问题是如何使用合成而不是继承来模拟引用对象?

1 个答案:

答案 0 :(得分:2)

您描述问题的方式,听起来这是使用继承的好例子。经验法则是如果A是-a B则使用继承,如果A是B实现的,则使用组合。

更喜欢使用组合继承的建议并不意味着“永远不会使用继承”。这意味着适当地使用继承。例如,如果您使用Stack在C ++中编写std::vector类,则不希望从Stack派生vectorStack不是vector,而是vector实现的,这意味着合成。您还希望避免创建深层次结构,因为这会导致紧密耦合。

然而,在你的情况下,继承似乎是一个明显的选择。