Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于DDD的一些疑问。 #7

Open
StephenYjw opened this issue May 19, 2020 · 1 comment
Open

关于DDD的一些疑问。 #7

StephenYjw opened this issue May 19, 2020 · 1 comment

Comments

@StephenYjw
Copy link

在Ordering 微服务demo中,CMD Handler在Application层调用仓储repo并提交事务,只是最基本的create 操作。而在大多数业务场景中,会有更复杂的业务逻辑,比如验证唯一性或者复杂计算甚至跨聚合的一些查询,这些也在App层的CMD Handler中实现吗?如果将这些核心领域逻辑代码放到App层,DDD分层不就会慢慢变成传统的三层架构模型了么?DDD 中 Domain层包含聚合,充血模型的实体,领域事件,仓储以及领域服务,但是课程中并没有提到领域服务。希望老师为我解惑~~

@huangchangmingxinghui
Copy link

你可以把命令处理器当作以前传统方式的应用Service,它是应用服务层,并不包含领域逻辑的,所有的领域逻辑都封装在Domain层,至于命令处理器放在WebApi中还是单独定义成类库,这得看你实际的业务需要,如果存在公共使用的应用服务,则可以定义成类库,供多个应用程序使用,但这种场景应该很少。
领域服务也属于领域概念,属于领域层,和应用服务是完全不同的。领域服务主要用于协调多个实体完成相应的业务逻辑情况,而这部分逻辑因不能放入任何实体,所以可以定义一个领域服务来完成,最典型的场景举例是:转账服务,因为转账涉及两个实体账户,每个实体只负责入账和出账方法,但并不能完成转账方法,所以需要领域服务来协调这两者完成转账功能。
还有在设计聚合根时,采用的尽可能设计小的聚合根,具体以业务用例操作的不变条件为依据。聚合根与聚合根之间的引用也通过引用聚合根Id的方式,而不是直接引用对象。如果在完成某业务用例的确需要其他聚合根,可以通过在应用层加载其他聚合根,再传入参数的方式给对应的方法。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants