RESTful创建一个聚合对象

Mik*_*son 0 domain-driven-design

我的网域中有一些Guid二级密钥,我想通过RESTfull从其他域中获取有关这些密钥的更多信息。

public class ProductAggregate
    {
        public Guid Id { get; set; }
        public Guid UserId { get; set; }
        public Guid AgencyId { get; set; }
        public string AgencyTitle { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中AgencyTitle,当前域中不存在此代码,我想通过Restfull从另一个实时服务中获取它,并将聚合的对象发送到客户端。是否可以接受?

tom*_*dge 5

听起来您正在谈论要呈现给用户而不是聚合的读取模型。

您可以通过多种方式处理此问题:

本地缓存

在您的服务中本地保留一个内存缓存,该缓存在AgencyId和AgencyTitle之间映射-可以通过以下方式进行:

  • 监听事件(即AgencyCreated)。如果您有事件驱动的系统,则这将是首选。如果相关,您还可以收听其他事件(即AgencyTitleUpdated)。
  • 通过向外部服务发出Web请求。您将首先查询本地缓存,然后决定是否调用外部服务。您需要考虑让缓存变得过时的程度。

对数据进行非规范化

您可以通过将AgencyTitle与AgencyId一起保存来复制数据。这样,您就无需呼叫外部服务。权衡是您需要考虑AgencyTitle可能多久更改一次,以及您如何处理该更改。

报告“域”

您可能拥有一个完全独立的服务,该服务侦听其他服务的数据并维护UI的视图模型。这会使您的其他服务无视其他服务的顾虑。当使用事件驱动的系统时,您将侦听来自其他服务的事件,这些服务允许您为UI构建视图模型。