在面向 DDD 的微服务中,基础设施和实体可以重用吗?
In a DDD oriented microservice the Infrastructure and Entities can be reused?
我正在考虑本文 (https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/ddd-oriented-microservice) 中描述的面向 DDD 的微服务架构。但我对数据访问和实体有疑问。
将域实体和数据访问放入一个公共项目甚至一个块中对我来说有意义吗?因为我认为我会为每个服务多次重写相同的数据访问。
TL;DR:没有。
微服务应该使用 APIs 相互通信。
两个原因:
- 作为聚合根的微服务定义了清晰的事务边界。重用代码意味着可能采取一条捷径来避开先决条件、后置条件和不变检查。
- 其次,代码共享迫使您将对模型的更改与所有依赖的微服务集成在一起,这可能会破坏采用微服务的目的。拥有不同的 API 版本将帮助您逐渐管理它。
不管你用不用DDD,SOA的四大原则是:
- 服务有明确的界限
- 服务是自治的
- 服务共享架构和契约,而不是 class
- 服务根据策略互操作
这样做的后果之一是服务永远不会共享它们的持久性。
有关于服务边界如何与有界上下文对齐的讨论,但您可以从简单开始,并从一对一对齐开始,有界上下文也永远不会以任何其他方式暴露它的持久性,而不是使用合同。
我正在考虑本文 (https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/ddd-oriented-microservice) 中描述的面向 DDD 的微服务架构。但我对数据访问和实体有疑问。
将域实体和数据访问放入一个公共项目甚至一个块中对我来说有意义吗?因为我认为我会为每个服务多次重写相同的数据访问。
TL;DR:没有。
微服务应该使用 APIs 相互通信。
两个原因:
- 作为聚合根的微服务定义了清晰的事务边界。重用代码意味着可能采取一条捷径来避开先决条件、后置条件和不变检查。
- 其次,代码共享迫使您将对模型的更改与所有依赖的微服务集成在一起,这可能会破坏采用微服务的目的。拥有不同的 API 版本将帮助您逐渐管理它。
不管你用不用DDD,SOA的四大原则是:
- 服务有明确的界限
- 服务是自治的
- 服务共享架构和契约,而不是 class
- 服务根据策略互操作
这样做的后果之一是服务永远不会共享它们的持久性。
有关于服务边界如何与有界上下文对齐的讨论,但您可以从简单开始,并从一对一对齐开始,有界上下文也永远不会以任何其他方式暴露它的持久性,而不是使用合同。