2012-08-04 66 views
0

我希望有人可以帮助我决定为这个设计建模的最佳方式,听起来应该是一个简单的用例。Grails数据建模困境

我有一个Client域类。我有一个Person命令对象和一个Firm命令对象,代表公司或组织。

我也有子类,让我们打电话给他们为ClientSubClass1ClientSubClass2为了命名,这两个扩展Client

我感到困惑的是客户应该能够成为一个人或一个公司。

因此,我认为最好的方法是使用嵌入并将Firm类和Person类都嵌入到客户端类中,并添加一个标志来指示客户是人还是公司。 否则我看不到如何使用继承来完成我所需要的。

任何想法将非常感激,谢谢。

+3

为什么人和公司只能扩展基础客户类? – 2012-08-04 23:19:44

+0

还会有其他班级也可以扩展人员或公司,但不是客户。 – Dave 2012-08-05 18:53:59

回答

0

好,只是为了回答这个问题并将其包括起来,我决定创建一个更高级别的Contact域类,它具有Person和Organization子类(tableperHierarchy false)。

客户端扩展人员,并包含一个嵌入式组织,以及一个标志,用于指示在引用客户端时是否应使用人员详细信息或组织详细信息,以用于实例,如何时显示客户端名称,我知道是否要使用个人姓名(标题,姓,首字母缩写,姓氏)或嵌入式组织的公司名称。

在Contact类定义中,我还使用了一个嵌入的Address类,它存放在'src/groovy'中,因此它不创建它自己的表。

所以我有一个混合的组成和继承工作得很好。

0

在Grails中,您可以在您的域类中使用继承,并且GORM将为您创建和管理数据库中的标志,而无需显式声明它。我将创建从客户端继承的Person和Firm域类。

命令类主要用于将请求中的参数绑定到控制器操作,这与您的数据存储和检索方式有些无关。

+0

我想他们(CommandObjects)也应该在你想重用常用结构(包括约束)时使用,例如一个地址,但是不想在自己的表中拥有地址。 – Dave 2012-08-05 18:55:27