我們在DDD領域建模過程中,往往會很容易忽略對關系的建模,或者可以理清兩個名詞之間的關系是1對1、1對多、多對多,但是不知道如何在模型中設計這些關系。尤其是在多對多的場景中,僅僅靠體現名詞對象之間的關聯關系來表達這種關系就會顯得缺乏表現力,這個時候就可以將“關系”提煉為模型中一個顯式的概念。
例如,
- 在招聘系統中,一個應聘者使用某一分簡歷對某個職位進行了投遞,此時簡歷和職位就發生了關系,我們可以把這個關系顯式的抽象為:應聘
- 在權限系統中,一個角色可以被授予一個用戶,這次授予我們可以抽象為:授權
- 在促銷系統中,促銷活動和促銷規則的組合,可以顯式抽象為:促銷產品
我在以前的文章中也寫過,我們不要忽略動詞,要對動詞有敏銳的嗅覺。領域中的動詞,往往他對應的名詞就是一個重要的模型概念,即聚合根。例如上面的2個例子,一次應聘的發生,產生一個應聘聚合根;一次授權的發生,產生授權聚合根;而促銷產品,則是促銷活動和促銷規格的組合二產生,也是一種多對多關系的關系建模。