我的情况是我有两种顾客。人与组织。 Person具有该组织不需要的一些属性(例如:名字,姓氏等)。然后是Person不需要的一些组织属性(例如:公司名称等)。但在软件领域,人和公司都是客户。
问题:最好将所有属性转储到一个名为Customer的域对象中,并使用像IsOrganization这样的bool区分person和org吗? 要么 拥有Person域类,组织域类和包含Person和Organization属性的Customer域类是否更好。
我觉得后者是要走的路,但我对这些想法持开放态度。 客户 - 人员关系为0到n,其中n = 1 客户 - 组织关系也是0到n,其中n = 1
如果有帮助,我正在使用NHibernate和FluentNHibernate。采用代码第一种方法。
答案 0 :(得分:1)
我认为你的第二种方法是要走的路。您可以将Customer模型设置为具有Customer作为抽象基类的域模型,该基类具有Person和Organization的所有公共属性,并且Person和Organization都是Customer的子类,每个子类具有特定于它们的属性。我认为这将是您的业务领域的准确模型。
至于如何在数据库中设置它以便nHibernate可以将此继承层次结构从数据模式映射到对象模型,您有三个选项:
1) table per class hierarchy
2) table per subclass
3) table per concrete class
进一步描述了这些内容
答案 1 :(得分:0)
最好有一个Person和Organization类以及一个定义共同属性和方法的合同的ICustomer接口。继承不是一个好的选择,因为两个类之间没有“is-a”关系。