API 与跨限界上下文的 DDD 中的事件
API vs Events in DDD across bounded contexts
在 DDD 中跨限界上下文集成时,以下哪项被认为是更好的做法?
1) 当实体在源 BC 中发生变化时发布事件,在消费 BC 中监听这些事件,将该数据整形为所需的实体并将其存储在消费 BC 中。
或
2) 当另一个 BC 需要该信息时,对拥有实体的 BC 进行同步调用 API。
或者是否有其他选项被认为比上述选项更好?
如果您对自治感兴趣,那么您不希望拥有需要其他服务才能使用的服务。
所以您可能应该换个角度思考——当远程数据提供者不可用时消费者如何工作是您的主要用例,然后考虑是否有数据提供者上线时是否要添加任何增强功能。
这通常意味着每个服务都会缓存它需要的数据副本。
让消费者提取他们需要的数据通常比尝试将数据推送给他们更简单——请参阅 Greg Young 在 Polyglot Data.
上的演讲
我认为问题不应该是«API vs event»,而是«sync vs async»,而且它不一定是最好或最坏的做法。这取决于您对如何集成 BC 的要求。这取决于您的域。
您可以使用 API 而不是事件实现异步集成,每隔一段时间调用远程 API,轮询请求。
在 DDD 中跨限界上下文集成时,以下哪项被认为是更好的做法?
1) 当实体在源 BC 中发生变化时发布事件,在消费 BC 中监听这些事件,将该数据整形为所需的实体并将其存储在消费 BC 中。
或
2) 当另一个 BC 需要该信息时,对拥有实体的 BC 进行同步调用 API。
或者是否有其他选项被认为比上述选项更好?
如果您对自治感兴趣,那么您不希望拥有需要其他服务才能使用的服务。
所以您可能应该换个角度思考——当远程数据提供者不可用时消费者如何工作是您的主要用例,然后考虑是否有数据提供者上线时是否要添加任何增强功能。
这通常意味着每个服务都会缓存它需要的数据副本。
让消费者提取他们需要的数据通常比尝试将数据推送给他们更简单——请参阅 Greg Young 在 Polyglot Data.
上的演讲我认为问题不应该是«API vs event»,而是«sync vs async»,而且它不一定是最好或最坏的做法。这取决于您对如何集成 BC 的要求。这取决于您的域。
您可以使用 API 而不是事件实现异步集成,每隔一段时间调用远程 API,轮询请求。