2016-07-23 84 views
0

我在我的域名中有一些Guid輔助鍵的聚合。我想通過RESTfull從其他域獲得關於這些鍵的更多信息。RESTfully創建一個聚合對象

public class ProductAggregate 
    { 
     public Guid Id { get; set; } 
     public Guid UserId { get; set; } 
     public Guid AgencyId { get; set; } 
     public string AgencyTitle { get; set; } 
} 

在上面的代碼AgencyTitle不存在於流通領域,我想從通過REST類型的其它Live服務得到它,併發送聚合的對象給客戶端。 這是一種可以接受的方式嗎?

+0

它如何成爲聚合的一部分,但不存在於當前域中? – tomliversidge

+0

@tomliversidge -i是DDD的新手,也許我問我的問題不好,但我需要的是從當前服務中需要的其他'microservice'中收集更多數據(例如,當我們從頭像獲得用戶頭像圖像一個用戶。 –

回答

4

聽起來好像你正在談論的是一種讀取模型,而不是一個聚合的用戶。

有多種方法可以處理這個問題:

本地緩存

保持在內存中的高速緩存中,在你的服務,AgencyId和AgencyTitle之間的映射 - 這既可以通過:

  • 正在收聽一個事件(即AgencyCreated)。如果你有一個事件驅動的系統,這將是首選。如果相關,您還可以聽其他事件(即AgencyTitleUpdated)。
  • 通過向外部服務發出web請求。您將首先查詢本地緩存,然後決定是否調用外部服務。你需要考慮你的緩存有多陳舊。

Denormalising數據

您可以通過保存AgencyTitle旁邊的AgencyId複製數據。這樣你就沒有電話給外部服務。權衡是你需要考慮AgencyTitle可能改變的頻率以及你如何處理這種改變。

報告「域」

你可以有一個完全獨立的服務,監聽來自其他服務的數據,並保持視圖模型的用戶界面。這會讓您的其他服務無視其他服務的擔憂。在使用事件驅動系統時,您會監聽其他服務的事件,這些服務允許您爲UI構建視圖模型