簡體   English   中英

哪個層或服務應與存儲庫聯系以獲取域實體驗證所需的其他數據

[英]What layer or service should contact a repository to get additional data needed for a domain entity validation

我在這里簡化了問題以縮小關注范圍:

需要存儲庫中的數據時,建議使用哪些建議的方法在域層中進行實體構建的驗證?

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

規則1:要求使用手機的員工必須在ABC公司工作6個月或更長時間

域層中的實體可用信息,這些信息源自UI,后來又從應用程序層的訂購服務傳遞過來,沒有足夠的信息來實施上述示例規則。 需要從存儲庫中查詢以返回員工的雇用日期,以計算他們是否工作了6個月或更長時間。

問題

問題是,此時應與存儲庫聯系哪個層或服務,以獲取驗證規則1所需的員工雇用日期? 除非通過了規則1,並且該實體的其他數據值也通過了,否則該域實體不被視為有效。

提前致謝。

對存儲庫的調用以獲取OrderValidationData的調用應該在Application Service中還是在域層中。

域驗證domain ,因此,它應該是域內服務的一部分。

您只需要想像一個應用程序服務與某個域的交互作用,而該域所處理的數據並沒有通過域本身的驗證來強制執行。 這是非常危險的,因為如果某些應用程序服務未執行所謂的驗證,則該域可能會損壞!

如果它在域層中,那么我猜我將不得不注入進行OrderValidationData調用所需的存儲庫實例? 另外,由於我讀過人們沒有將存儲庫操作添加到實體中,因此我將必須創建域服務來執行存儲庫操作。

豐富的域模型 VS 貧血的域模型 (見富VS貧血的域模型

驗證存儲庫中的域又如何呢? 如果您已經實現了ProductRepository ,那么我相信最好的選擇是在要添加或更新域對象時驗證它們。 也就是說,所有上層都必須強制遵循存儲庫的規則,這意味着您將打破域模型的機會降低到了

順便說一句,我將這些驗證作為規范來實現(請參閱規范模式 ),這樣您就可以在域對象被存儲庫持久化之前的某些操作的早期階段驗證您的域。 您可能需要在同一操作中驗證同一域對象,並且規范是重用n層體系結構中的驗證規則的好朋友。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM