RESTful创建聚合对象

时间:2016-07-23 12:32:20

标签: 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; }
}

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

1 个答案:

答案 0 :(得分:4)

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

有多种方法可以解决这个问题:

本地缓存

在您的服务中本地保留内存缓存,以便在AgencyId和AgencyTitle之间进行映射 - 这可以通过:

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

对数据进行非规范化

您可以通过将AgencyTitle与AgencyId一起保存来复制数据。这样您就无法调用外部服务。权衡是你需要考虑AgencyTitle可能改变的频率,以及你如何处理这种变化。

举报“域名”

您可以拥有一个完全独立的服务,用于侦听来自其他服务的数据并维护UI的视图模型。这将使您的其他服务不了解其他服务的顾虑。使用事件驱动系统时,您将从其他服务中侦听事件,以便为UI构建视图模型