我目前正在將遺留應用程序遷移到域驅動的設計模型,我遇到了這個問題: 該應用程序是關於實時管理大量聯繫人,包括檢查重複項。每當有人保存一個新的聯繫人時,它必須通過一個第三方軟件(它基本上是一個相似性搜索軟件)的重複檢查。如果通過檢查,聯繫人將在SQL中創建,聯繫人的一小部分(與重複檢查相關的一些核心字段)必須存儲在第三方軟件的數據庫中。 所以實體「聯繫人」生活在兩個(同步)存儲系統中,但一個系統只有一小部分字段,而SQL有50個以上的聯繫人字段。DDD:如何處理存儲在多個存儲系統中的一個實體?
現在我在想是否可以爲「聯繫」(Contact和ContactShort)創建兩種類型。因此,我還必須爲這些實體創建兩個存儲庫,並將這些存儲庫用於最終用於執行那些需要重複檢查軟件(如保存/插入方法)的操作的域服務中。
如何處理這種情況有一個很好的經驗法則嗎?
編輯:我仍然沒有找到一個明確的解決方案,但想到更多關於它: 也許在這種情況下,將重複檢查存儲系統與SQL DB分開是錯誤的。其實,我認爲揭露第三方軟件的方法是錯誤的。這是純粹的基礎設施。由於保存操作決不能在沒有重複檢查的情況下執行,我認爲對第三方軟件的調用應該在SQLRepository的內部。它絕不能離開基礎架構層,因爲它永遠不會返回聯繫人的有效實體。你怎麼看?
相關:http://stackoverflow.com/questions/4355860/implementing-set-based-constraints-in-cqrs – 2011-06-13 19:08:42