0

我在這裏簡單的問題,以縮小將附加數據:哪一層或服務應與一個存儲庫,以獲得所需的域實體驗證

什麼是一些推薦的方法領域層的實體進行驗證在需要來自存儲庫的數據時構建?

例如,考慮到通過需要下面的驗證規則創建的實體之前:

規則1:要求換一部手機的職員必須有工作了ABC公司爲6個月以上

實體在域層中可用的信息源於UI,後來從應用層的訂單服務傳入,但沒有足夠的信息來執行上述示例規則。需要從存儲庫查詢以返回僱員的僱用日期,以計算他們是否已經工作了6個月或更長時間。

問題

的問題是什麼層或服務應該在這一點上聯繫倉庫去驗證規則1所需要的員工僱傭日期?除非規則1通過並且實體的其他數據值也通過,否則該域實體不被視爲有效。

在此先感謝。

回答

0

應該調用存儲庫以獲取OrderValidationData的位置是 應用服務還是應該位於域圖層中。

域驗證,從而,它應該是域內的服務的一部分。

您只需要想象不僅僅是一個應用程序服務與某個域進行交互,而域正在處理的數據並未在域本身進行驗證。這是非常危險的,因爲如果某些應用程序服務不執行所謂的驗證,那麼該域可能會被破壞!

如果是域層,然後我想我得注入,以便爲 OrderValidationData調用所需的存儲庫的 實例嗎?另外,由於我讀過的人不會將知識庫 操作添加到實體中,因此我將不得不創建一個域服務 來執行存儲庫操作。

豐富的域模型 VS 貧血的域模型(見Rich vs Anemic Domain Model

以及關於你的資料庫驗證您的域名是什麼?如果您已經實施了ProductRepository,我相信您最好的選擇就是在要添加或更新域對象時進行驗證。也就是說,所有上層都必須嚴格遵守存儲庫的規則,這意味着你已經減少到破壞域模型的機會爲。

BTW,我會執行這些驗證爲規格(見Specification pattern),所以之前的域對象得到由倉庫堅持,你可以在某些操作的早期階段,驗證您的域。可能發生的情況是,您需要在相同的操作中驗證相同的域對象,並且規範是在n層體系結構中重用驗證規則的好朋友。

相關問題