【发布时间】:2011-07-17 11:13:05
【问题描述】:
关于这个问题:
Composition over Inheritance - where do extra properties go?
接受的答案和类似的答案很好地回答了这个问题。但更进一步,如果销售部门和生产部门想要记录有关疾病和假期缺勤的不同信息怎么办?这可能是一种解决方案:
public class Holiday : Absence
{
//Extra fields go here.
}
public class Sickness : Absence
{
//Extra fields go here.
}
public class SalesHoliday : Holiday
{
//Extra fields go here.
}
public class SalesSickness : Sickness
{
//Extra fields go here.
}
public class ProductionHoliday : Sickness
{
//Extra fields go here.
}
public class ProductionSickness : Sickness
{
//Extra fields go here.
}
显然,这是班级爆炸的开始,只会变得更糟,因此应该避免。
一种可能的解决方案是使用Decorator Pattern(四人组)。这将是理想的,但在这个假设的示例中,持久性是使用 NHibernate。我到处寻找如何在 NHibernate 中映射装饰器模式的示例,但没有找到任何东西。我的实验有一点,利用了子类映射、联合子类映射、联合子类映射、鉴别器、隐式多态性和多对任意映射的各种组合,但到目前为止还没有令人满意的结果。有人破解过这个吗? Employee 实体将具有任何类型的缺勤集合,因此需要多态行为。
【问题讨论】:
标签: nhibernate design-patterns architecture domain-driven-design decorator