我想第一次做一些領域驅動的設計,並會很樂意接受以下輸入。設計:需要建模建議
目前我正在模擬一個學生預訂參加課程。學生和課程是實體(和聚合根源)。
我的第一個問題:
起初我以爲保留作爲一個實體爲好,因爲有使用情況,我想查詢預訂獨立的學生和課程。但是,要使模型更簡單並避免雙向關聯學生< - >註冊和課程< --->註冊我正在考慮將預留值作爲值對象。但是這有意義嗎?
考慮到使用情況下的查看全部對於特定日子的預訂,我需要加載所有課程並檢索他們的預訂以供檢查。這種情況在我的系統中並不常見,但它仍然感覺不太正確。任何其他想法如何解決這個問題,而不使預約實體?
第二個問題:
假設我使預留值對象。我現在想要實施註冊服務。從概念上講,它應該做到以下幾點:
- 創建包含學生 的ID和課程ID的預定值對象。
- 從存儲庫加載課程。
- 將預訂添加到課程中。
- 將課程保存到存儲庫。
假設資源庫的實現使用文檔數據庫並使用樂觀鎖定來處理衝突。現在假設當課程保存到存儲庫時,其他一些學生提前幾分鐘預約,因此我們得到一個OptimisticLockingException。
我該如何解決這個問題,而不會將關於持久化機制的知識推向域層? (或者相反。)我在技術上需要做的是基本上「再試一次」:重新加載課程,再次添加預約,並保存它。但我根本無法弄清楚如何對模型進行建模,同時保持領域模型和持久層之間的關注的清晰分離。
任何幫助將不勝感激。
我同意你所提出的觀點,並且對解釋進行+1。 –
@BalázsMáriaNémeth非常感謝。 – Akshay
感謝您的回覆,非常感謝!現在我確信Reservation應該是它自己的實體。仍然不確定處理同一課程同時更新的最佳方式,但它似乎被認爲是脫離主題。 :) – Daniel