2012-08-04 33 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