2011-03-02 70 views
-5

我正在用Grails構建一個Web應用程序,需要模擬一個複雜的組織結構。即用grails建模一個複雜的領域模型

  • 組織
  • 辦公室
  • 人民

,並在層次結構的每個層次檢索人的名單。問題在於Grails似乎對多態性沒有很好的支持(沒有接口等),這就是我通常對這樣的結構進行建模的方式。

你會如何在Grails中建模這樣的結構?你知道任何好的例子嗎?

編輯:

關於接口JIRA它不是,它不其是從我讀格姆不支持正常呢。參考指南僅在涉及GORM時提及抽象類。

我在找什麼就像Martin Fowlers Organizational Patterns。我需要一種方法來從任何級別的層級中獲取人員,而不必明確地遍歷結構,並且據我所見,GORM不支持這一點。

PS請證明我錯了我會很開心。

+0

第5.2.3節實際上,Grails的確實允許您使用接口和繼承的域類。你指的是什麼其他類型的支持? 您希望在這些類中使用哪些常用接口?我沒有看到一個 - 除了他們每個人「有一個地址」。 – 2011-03-02 10:56:00

+0

你真的有任何使用GORM抽象基類和接口的經驗,因爲從我在谷歌上找到的東西以及試圖實現他們個人GORM不正確地處理它們。通過閱讀文檔的內容,我會驚訝地發現開發者認爲接口和抽象類是重要的。 – eaglestorm 2011-03-04 07:40:08

+0

我確實有一定的Grails經驗,雖然不是我低估了你的想法,但我可以猜到。首先,你的問題還不夠具體 - 1)你花了那麼長時間才提到「組織結構」和2)一個特定的任務(「從任何層面上的人羣中獲取人物」),並且仍然3) t描述你們班的關係。如果人們想要一個深刻的答案,人們需要時間來描述這樣的事情。一個更好的問題是「我有這樣的類模型(描述或圖),我需要做這樣的查詢/更新:(樣本)」。 – 2013-04-17 12:27:07

回答

2

一個人可以有零或許多辦公室,但通常是一個辦公室。辦公室在一個部門,部門在一個組織中。在最簡單的情況下,每個子級別具有來自下一級別的類型的屬性,並且下一級別具有來自子級別的對象的列表。

class People{ 
    Office office 
} 

class Office{ 
    static hasMany = [employee:People] 
    Department department 
} 

class Department{ 
    static hasMany = [offices:Office] 
    Organisation organisation 
} 

class Organisation{ 
    static hasMany = [departments:Department] 
} 

如果你想知道在哪個組織是一個人,你可以這樣做:

def people = ... 
def organisation = people.office.department.organisation 
+0

這並不真正涵蓋我所尋找的任何標準組織結構將需要某種界面或抽象基類見編輯。 – eaglestorm 2011-03-04 07:37:44

0

至於抽象類,其實我已經用他們在GORM域。抽象類應該位於整個域文件夾之外。另外請注意,正因爲如此,GORM並沒有對它們施加任何魔法。因此,如果您提供像「static constaints = ...」或「static mapping = ...」這樣的字段,只要派生類不影響它們,就可以將它們考慮在內。還有一件值得注意的事情:域包之外的基類應該是抽象的。如果不是,GORM就會抱怨。

至於接口,我並沒有看到太多的問題。您可以在您的域類上實現儘可能多的接口。你不能聲明使用接口作爲它們類型的字段,除非你提供了關於它們的實際類型的提示(不完全確定這是可能的)。這是底層Hibernate堆棧的一個限制,它直接影響了它如何處理繼承(即每個層次的表)。

但是請記住,動態語言(如Groovy REALLY)會使接口變得更加有用。如果您爲所有的域類提供了一個通用名稱的方法,那麼您將能夠編寫像organisationStructureItem.findPeople()之類的東西,編譯器不會抱怨它。在Java等強類型語言中,情況並非如此。

+0

我是一個剛剛工作的軟件工程工具的忠實粉絲,我很抱歉地說這是Grails沒有的一個領域。就因爲你可以並不意味着你應該使用動態語言的魔力。 – eaglestorm 2011-03-10 10:30:51