我有一个带有Quotations控制器的Web应用程序(在ASP.NET MVC中)。该控制器可以处理多种报价类型,MotorQuotation,PropertyQuotation等......
目前,它正在使用继承(即引用模型及其子项)来对域进行建模。各种子类在存储的数据中存在差异,而不是它们的行为。行为的差异将来自其验证方法,因为验证可能会有所不同,具体取决于子类可能存储的唯一字段。
问题是如何使用合成而不是继承来模拟引用对象?
答案 0 :(得分:2)
您描述问题的方式,听起来这是使用继承的好例子。经验法则是如果A是-a B则使用继承,如果A是B实现的,则使用组合。
更喜欢使用组合继承的建议并不意味着“永远不会使用继承”。这意味着适当地使用继承。例如,如果您使用Stack
在C ++中编写std::vector
类,则不希望从Stack
派生vector
。 Stack
不是vector
,而是vector
实现的,这意味着合成。您还希望避免创建深层次结构,因为这会导致紧密耦合。
然而,在你的情况下,继承似乎是一个明显的选择。