DDD强调对核心领域投入最多的资源和精力,以便支持业务的发展。
- 为什么要分解问题域?
复杂的系统往往有许多个小系统和组件构成,资源和精力成本有限,做不到也没有必要都进行完美设计,核心领域关系到系统成败。
- 如何专注核心问题
基于和业务专家沟通得到的领域知识,将业务领域划分为一个个子域,子域分为以下几种。
- 核心域:决定业务成败的关键,一定会随着业务演化,保持竞争力,不能采购,否则会丢失业务核心优势。
- 支撑域:为业务提供辅助功能的领域,比如推荐系统、广告系统。
- 通用域:为许多业务提供支撑功能的领域,比如邮件、消息、推送、日志、监控等等。
3.系统中并非都要进行完美设计
- 专注清晰的边界而非完美的模型
很多业务很早之前就是单体应用,随着时间发展,很可能存在不完美的区域,清晰的边界可以将不完美的区域隔离开来,减少影响(后续会在上下文映射相关部分介绍)。
- 一开始核心领域模型不总是完美的
业务早期更看重的是交付速度而非灵活设计,因为企业本身也不知道业务是否会成功,更多的是一种探索尝试状态,如果业务产品是成功的,那么需要重构代码支持产品演化。
- 没有核心域怎么办?
如果所开发的都是支撑域或者通用域,没有必要使用DDD的模型驱动设计浪费精力。
网友评论