2012-03-11 63 views
0

我有一种情况,我有两种客户。人员和组织。 Person具有该组织不需要的一些属性(例如:名字,姓氏等)。然后有一些Person不需要的组织属性(例如:公司名称等)。但是在软件领域,Person和Company都是客户。什么是可扩展的方式来创建这个NHibernate域模型

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

我觉得后者是要走的路,但我愿意接受创意。 客户 - 人际关系为0到n,其中n = 1 客户 - 组织关系也是0到n,其中n = 1

如果有帮助,我使用的是NHibernate和FluentNHibernate。采取代码第一的方法。

回答

1

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

至于如何在数据库中设置这让NHibernate的可以映射数据模式的对象模型这种继承层次,你有三种选择:

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

这些内容将在进一步描述nHibernate documentation

0

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

+0

因此,如果我有每个人和组织的表..我不会在应用程序内使用ID(自动增量)作为客户号码。对? – Perpetualcoder 2012-03-12 22:27:26

相关问题