使用者和角色多對多問題,物件間關聯處理問題

hushawn發表於2011-12-29
最近剛開始在學習DDD,想在專案中實踐下,現在在弄許可權管理部分,在建立使用者和角色模型時候,經過分析後得出
(1)使用者物件和角色物件是對多對關係,模型中加了個關聯類叫角色分配類(就是給使用者分配一個或多個角色)
(2)因為沒有具體業務需求,我決定在介面上在新增使用者時候為該使用者分配一個多個角色,把使用者和分配關係當成一個聚合進行持久化,替換更新,得出下面類
使用者(使用者賬號,密碼,角色分配列表,獲取所有角色方法)
角色分配(使用者,角色)
角色(角色名稱)
這樣行嗎?
(3)因為一般只會關心使用者有哪些角色,而不會關心一個角色有哪些使用者使用,所以角色裡沒有使用者列表和角色分配類列表;
使用者和角色分配組成一個聚合,使用者是聚合根,角色分配是聚合裡的值物件,這樣做可以嗎
(4)我在做登入驗證時候,透過介面呼叫應用服務層的方法
Login(string userAccount, string password)
{
呼叫UserRepository裡的FindUserByUserAccountPassword(userAccount, password)
獲取User領域物件,根據是否為空判斷是否透過驗證
}
這個使用者登入功能的實現方式對嗎?
因為聚合是一個整體,一起持久化,一起更新,是否一起查詢出來,如果是一起查詢出來,FindUserByUserAccountPassword我就準備建個檢視,把使用者,角色,使用者角色關聯表一起關聯起來,查詢出來,構建出使用者物件,使用者關聯物件,角色物件,而我現在只是驗證賬號和密碼是否有 ,按照以前做法只需要驗證使用者表,所以在這裡FindUserByUserAccountPassword是否只構建使用者物件,而不構建聚合裡的值物件就是角色關聯物件,一個是查詢效能好,這是否違背DDD的聚合原理?

(5)另外我如果要在使用者和一個員工關聯,也就是把這個使用者指定給了一個員工,員工有員工姓名和員工編號,我認為員工是單獨的實體,假設員工和使用者是一對一關聯關係,那麼使用者就變成
使用者(使用者賬號,密碼,角色分配列表,獲取所有角色方法,員工)
員工(員工姓名,員工編號)
這樣在使用者裡引用了員工物件應該是對的吧,現在的問題是使用者和員工之間應該是沒有聚合關係,當我查詢一個使用者領域物件的時候,根據聚合概念不應該把員工物件構建出來,但是我有需求當登入後,要在介面上顯示使用者對應的員工的姓名和員工工號,那我怎麼去獲取這個資訊呢?難道分兩次去讀取操作,另外領域物件查詢出來後的操作是在記憶體裡操作的,而其領域內不應該涉及技術性的東西,不能在領域物件內有使用Repository的功能,看了些資料說在service(不知道是應用服務,還是領域服務)再去呼叫員工的Repository去讀取相關資訊,這樣的話是不是太麻煩,還要兩次讀取資料庫,標準做法是什麼樣的?
總結下,就是DDD怎麼處理處理各種聚合根間的關聯或者說是物件間的非聚合引用關係

請各位老師指教下,比較具體的問題,真是有點迷惑,非常感謝


相關文章