一, Hello DDD
刚开始接触学习「DDD - 领域驱动」的时候, 我被各种新颖的概念所吸引:「领域」,「领域驱动」,「子域」,「聚合」,「聚合根」,「值对象」,「通用语言」..... 总之一大堆有关的, 无关的概念从我的脑海经过, 其中不乏让我陷入思考的地方, 我原以为我会很开心地 "享用" 这些新知识带给我的营养(参照下图)
可事实上, 我为学习「DDD - 领域驱动」付出了很多的精力, 我尝试用「DDD CRUD」,「DDD vs CRUD」,「Domain-Driven Design」,「DDD CQRS」,「领域驱动设计」等等一系列的关键字搜集我想要的资料(翻遍了 Google 前排的所有文章 & 手动感谢谷歌让我能获得一些精彩的文章), 可似乎都不太近人意, 一方面这个「新概念」我对它的困惑太多了, 另一方面真正「落地」并实践起来的经验有很少是可以直接借鉴的, 再结合一些实际的场景(没有人解答), 我感到更加困惑.
传统开发面临的问题
我们先来讨论一下传统开发面临的一些问题吧, 就先从传统开发中被广泛应用于 web 开发的传统三层框架:「MVC」 开始说起吧.
- @Service
- public class EquipmentServiceImpl implements EquipmentService {
- @Autowired private EmailService emailService;
- @Autowired private EquipmentRepository equipmentRepository;
- public void setEquipmentBroken(Long id) {
- Equipment equipment = equipmentRepository.findById(id);
- equipment.setStatus(Equipment.StatusEnum.BROKEN);
- emailService.sendEmail();
- }
- }
- public void setEquipmentBroken(Long id) {
- Equipment equipment = equipmentRepository.findById(id);
- equipment.broken();
- eventBus.publish(new EquipmentBrokenEvent(equipment.id));
- }
- userService.love(Jack, Rose) => Jack.love(Rose)
- companyService.hire(company,employee) => Company.hire(employee)
- There is No U in CRUD: http://jlhood.com/there-is-no-u-in-crud/
- Event sourcing vs CRUD:
来源: https://www.cnblogs.com/wmyskxz/p/11019453.html