使用者和角色多對多問題,物件間關聯處理問題
最近剛開始在學習DDD,想在專案中實踐下,現在在弄許可權管理部分,在建立使用者和角色模型時候,經過分析後得出
(1)使用者物件和角色物件是對多對關係,模型中加了個關聯類叫角色分配類(就是給使用者分配一個或多個角色)
(2)因為沒有具體業務需求,我決定在介面上在新增使用者時候為該使用者分配一個多個角色,把使用者和分配關係當成一個聚合進行持久化,替換更新,得出下面類
使用者(使用者賬號,密碼,角色分配列表,獲取所有角色方法)
角色分配(使用者,角色)
角色(角色名稱)
這樣行嗎?
(3)因為一般只會關心使用者有哪些角色,而不會關心一個角色有哪些使用者使用,所以角色裡沒有使用者列表和角色分配類列表;
使用者和角色分配組成一個聚合,使用者是聚合根,角色分配是聚合裡的值物件,這樣做可以嗎
(4)我在做登入驗證時候,透過介面呼叫應用服務層的方法
Login(string userAccount, string password)
{
呼叫UserRepository裡的FindUserByUserAccountPassword(userAccount, password)
獲取User領域物件,根據是否為空判斷是否透過驗證
}
這個使用者登入功能的實現方式對嗎?
因為聚合是一個整體,一起持久化,一起更新,是否一起查詢出來,如果是一起查詢出來,FindUserByUserAccountPassword我就準備建個檢視,把使用者,角色,使用者角色關聯表一起關聯起來,查詢出來,構建出使用者物件,使用者關聯物件,角色物件,而我現在只是驗證賬號和密碼是否有 ,按照以前做法只需要驗證使用者表,所以在這裡FindUserByUserAccountPassword是否只構建使用者物件,而不構建聚合裡的值物件就是角色關聯物件,一個是查詢效能好,這是否違背DDD的聚合原理?
(5)另外我如果要在使用者和一個員工關聯,也就是把這個使用者指定給了一個員工,員工有員工姓名和員工編號,我認為員工是單獨的實體,假設員工和使用者是一對一關聯關係,那麼使用者就變成
使用者(使用者賬號,密碼,角色分配列表,獲取所有角色方法,員工)
員工(員工姓名,員工編號)
這樣在使用者裡引用了員工物件應該是對的吧,現在的問題是使用者和員工之間應該是沒有聚合關係,當我查詢一個使用者領域物件的時候,根據聚合概念不應該把員工物件構建出來,但是我有需求當登入後,要在介面上顯示使用者對應的員工的姓名和員工工號,那我怎麼去獲取這個資訊呢?難道分兩次去讀取操作,另外領域物件查詢出來後的操作是在記憶體裡操作的,而其領域內不應該涉及技術性的東西,不能在領域物件內有使用Repository的功能,看了些資料說在service(不知道是應用服務,還是領域服務)再去呼叫員工的Repository去讀取相關資訊,這樣的話是不是太麻煩,還要兩次讀取資料庫,標準做法是什麼樣的?
總結下,就是DDD怎麼處理處理各種聚合根間的關聯或者說是物件間的非聚合引用關係
請各位老師指教下,比較具體的問題,真是有點迷惑,非常感謝
(1)使用者物件和角色物件是對多對關係,模型中加了個關聯類叫角色分配類(就是給使用者分配一個或多個角色)
(2)因為沒有具體業務需求,我決定在介面上在新增使用者時候為該使用者分配一個多個角色,把使用者和分配關係當成一個聚合進行持久化,替換更新,得出下面類
使用者(使用者賬號,密碼,角色分配列表,獲取所有角色方法)
角色分配(使用者,角色)
角色(角色名稱)
這樣行嗎?
(3)因為一般只會關心使用者有哪些角色,而不會關心一個角色有哪些使用者使用,所以角色裡沒有使用者列表和角色分配類列表;
使用者和角色分配組成一個聚合,使用者是聚合根,角色分配是聚合裡的值物件,這樣做可以嗎
(4)我在做登入驗證時候,透過介面呼叫應用服務層的方法
Login(string userAccount, string password)
{
呼叫UserRepository裡的FindUserByUserAccountPassword(userAccount, password)
獲取User領域物件,根據是否為空判斷是否透過驗證
}
這個使用者登入功能的實現方式對嗎?
因為聚合是一個整體,一起持久化,一起更新,是否一起查詢出來,如果是一起查詢出來,FindUserByUserAccountPassword我就準備建個檢視,把使用者,角色,使用者角色關聯表一起關聯起來,查詢出來,構建出使用者物件,使用者關聯物件,角色物件,而我現在只是驗證賬號和密碼是否有 ,按照以前做法只需要驗證使用者表,所以在這裡FindUserByUserAccountPassword是否只構建使用者物件,而不構建聚合裡的值物件就是角色關聯物件,一個是查詢效能好,這是否違背DDD的聚合原理?
(5)另外我如果要在使用者和一個員工關聯,也就是把這個使用者指定給了一個員工,員工有員工姓名和員工編號,我認為員工是單獨的實體,假設員工和使用者是一對一關聯關係,那麼使用者就變成
使用者(使用者賬號,密碼,角色分配列表,獲取所有角色方法,員工)
員工(員工姓名,員工編號)
這樣在使用者裡引用了員工物件應該是對的吧,現在的問題是使用者和員工之間應該是沒有聚合關係,當我查詢一個使用者領域物件的時候,根據聚合概念不應該把員工物件構建出來,但是我有需求當登入後,要在介面上顯示使用者對應的員工的姓名和員工工號,那我怎麼去獲取這個資訊呢?難道分兩次去讀取操作,另外領域物件查詢出來後的操作是在記憶體裡操作的,而其領域內不應該涉及技術性的東西,不能在領域物件內有使用Repository的功能,看了些資料說在service(不知道是應用服務,還是領域服務)再去呼叫員工的Repository去讀取相關資訊,這樣的話是不是太麻煩,還要兩次讀取資料庫,標準做法是什麼樣的?
總結下,就是DDD怎麼處理處理各種聚合根間的關聯或者說是物件間的非聚合引用關係
請各位老師指教下,比較具體的問題,真是有點迷惑,非常感謝
相關文章
- 關於Hibernate一對多關聯儲存問題
- 業務物件對映到表之間的關聯問題!!物件
- 多對多的操作問題
- 一個物件多處引用的維護問題物件
- 多對一(主鍵)關係,create問題
- 多對一處理 和一對多處理的處理
- ORACLE未繫結變數和硬解析過多問題處理Oracle變數
- 關於時間 PHP 處理包遇到的問題時間序列化差值問題PHP
- Mybatis plus 一對多關聯查詢分頁不準確的問題MyBatis
- 多程式問題
- crontab對oracle操作問題處理Oracle
- 處理多個會話時的 Cookie 和 Headers複用問題會話CookieHeader
- 處理多個會話時的 Cookie 和 Headers 複用問題會話CookieHeader
- 多執行緒相關問題執行緒
- 怎麼處理WEB應用中的JAVA多執行緒問題(併發問題)WebJava執行緒
- python關於多級包之間的引用問題Python
- spring-data-jpa一對多、多對多雙向關聯,查詢操作的時候進入死迴圈問題Spring
- sysaux 表空間不足問題處理UX
- PowerPoint常見問題及對策之如何對齊多個物件物件
- 有關計算機和網路卡對資料處理的問題計算機
- 請教cmp關聯的問題,1:1,1:n多關係
- RDSforMySQLMysqldump常見問題和處理ORMMySql
- 關於strace 工具處理問題技巧
- MyBatis表關聯 一對多 多對一 多對多MyBatis
- 關於陣列的物件獲取及排序問題/小程式的多層頁面返回問題陣列物件排序
- Linux下處理時間同步相關問題彙總Linux
- 傳輸表空間及問題處理
- 處理TEMP表空間滿的問題
- python中多程式處理資料庫連線的問題Python資料庫
- Laravel多對多模型關聯Laravel模型
- Oracle資料庫無效物件問題處理Oracle資料庫物件
- Hibernate 一對多配置 級聯操作(級聯失敗問題分析解決)
- 使用__attribute__處理對齊問題
- 關於 多程式epoll 與 “驚群”問題
- 小小問題―關於java多執行緒Java執行緒
- Mybatis一對多、多對一處理MyBatis
- mybatis一對多&&多對一處理MyBatis
- 多程式通訊系列問題