什么是可扩展的方法来创建这个NHibernate域模型

时间:2012-03-11 01:25:46

标签: nhibernate fluent-nhibernate class-design

我的情况是我有两种顾客。人与组织。 Person具有该组织不需要的一些属性(例如:名字,姓氏等)。然后是Person不需要的一些组织属性(例如:公司名称等)。但在软件领域,人和公司都是客户。

问题:最好将所有属性转储到一个名为Customer的域对象中,并使用像IsOrganization这样的bool区分person和org吗? 要么 拥有Person域类,组织域类和包含Person和Organization属性的Customer域类是否更好。

我觉得后者是要走的路,但我对这些想法持开放态度。 客户 - 人员关系为0到n,其中n = 1 客户 - 组织关系也是0到n,其中n = 1

如果有帮助,我正在使用NHibernate和FluentNHibernate。采用代码第一种方法。

2 个答案:

答案 0 :(得分:1)

我认为你的第二种方法是要走的路。您可以将Customer模型设置为具有Customer作为抽象基类的域模型,该基类具有Person和Organization的所有公共属性,并且Person和Organization都是Customer的子类,每个子类具有特定于它们的属性。我认为这将是您的业务领域的准确模型。

至于如何在数据库中设置它以便nHibernate可以将此继承层次结构从数据模式映射到对象模型,您有三个选项:

1) table per class hierarchy
2) table per subclass
3) table per concrete class

nHibernate documentation

进一步描述了这些内容

答案 1 :(得分:0)

最好有一个Person和Organization类以及一个定义共同属性和方法的合同的ICustomer接口。继承不是一个好的选择,因为两个类之间没有“is-a”关系。