2016-01-25 122 views
1

我正在考慮爲我們的下一個應用程序使用DDD。我已經發現了很多有趣的論文和答案,但找不到解決我的問題的方法:DDD,外部數據和存儲庫

我們有一個SOA。架構,其中一些服務被稱爲數據的主人。這很好,但我不知道如何很好地與DDD一起使用它們。

給定一個服務「僱員」誰是Employee數據的主人,它是一個粗略的幾個簡單的值(姓和名,出生日期,地址)。 我的新應用程序應跟蹤向這些員工提供的培訓。所以我有Participant的概念,ParticipantEmployee具有相同的值,加上一系列訓練和技能。

我們可以假設「培訓」的應用與包含用於檢索的第一和姓氏一個participant_idskill和一個employee_id參與者表的數據庫。

我正確嗎?

但是現在,我可以使用哪個組件調用「員工」服務?是ParticipantRepository,所以當我得到一個參與者時,我有名字。或者是在使用它們之前完成Participant數據的應用服務。或者我可以在需要時明確調用員工服務?

非常感謝。

回答

1

在您的培訓應用程序中(我的意思是在您的應用程序的域中),員工的概念可能不像外部參考文件那樣存在。正如你所說的那樣,這將是一個參與者。

我知道您需要從員工服務獲取一些數據來填充參與者。我可以想到很少的選擇。

1)ParticipantRepository構建一個參與者,這是一個聚合根,其中一些數據可能在一個PersonalDetails值對象中。這個值對象是通過調用僱員應用程序構造的。這種方法很簡單,但可能不是最好的。這是您提到的方法,其中ParticipantRepository調用接口PersonalDetailsService,並且該接口的實現執行對Employee服務的實際調用。通過這種方式,您的域名不會與員工打交道,因爲它只能看到PersonalDetails。

2)通過複製員工服務中的數據實現最終一致性:如果員工服務可以在更新員工時(例如,通過消息傳遞)發送通知,則可以收聽這些事件並擁有隻讀數據副本。這樣做的好處是,即使員工服務出現故障,您的應用也能正常工作。問題是你可能需要構建一些東西來重新發送可能已經丟失的數據。

這兩種方法都很好地解釋在書Implementing Domain-Driven Design

+0

優秀的答案。如果現有的系統允許的話,我可能會用2)。 – guillaume31