有几个问题,希望解答下

来源:3-10 优雅地实现一致性:聚合

weixin_慕婉清4178197

2022-02-14

1.如果改由手动调用资源库的形式,那应该是由领域层调用呢,还是service调用?例如取消订单,应该是Order.cancel()方法内部调用资源库,还是应用层在Order.cancel()方法之后调用?
2.为什么实体的有些方法的入参会加上其它BC的service呢?例如货道售卖机的finishOrder()就传入了设备service,用于弹出商品。改成Autowired注解注入可以吗?
3.基于第二个问题,finishOrder()方法索性不去调用弹出商品方法,改由应用层去调用,也就是先调用货道售卖机的finishOrder(),再调用设备service的弹出商品方法,这样子操作好不好呢?


课程看到现在,我最多的疑问就是,某些操作应该在哪一层实现,该怎么设计。到底是由应用层统一操作多个聚合根呢,还是由A聚合根操作B聚合根,应用层只调用A?

写回答

2回答

蒋犇犇

2022-06-08

经典4层架构

  1. 接口层:负责外部的通信,协议的解析,返回VO等等

  2. 应用层:指挥领域模型和基础设施来完成用户的故事。一般是事务的控制、事件的订阅、从资源库读取模型等。

  3. 领域层:核心层,领域模型、资源库、实体、领域事件、工厂等等。

  4. 基础设施层:通用的框架和工具,存储访问等等。类似dao类、数据对象类、远程访问类

1
0

尤达_技术咖啡

2022-02-15

手动调用资源库一般在应用层调用。

在需要集成其他BC的情况下,实体调用其他BC的服务很难避免,之所以用传入的方法而不是autowiried,是因为实体数量较多,一般不由spring容器管理,另外也可以节约一些内存。

这样做一定程度上更接近贫血模型,但是这里没有严格标准,可以灵活处理。

多个聚合的配合一般由应用层负责。应用层职责问题在应用层对应小节以及讲解应用服务和领域服务区别的时候都有讲到,汽车的例子里也有提到。


0
0

DDD(领域驱动设计)思想解读及优秀实践

结合智慧零售项目实践,深度解剖DDD思想与应用方法

883 学习 · 98 问题

查看课程