领域驱动设计(简称DDD)
康威定律
DDD的作用
1.有助于指导我们确定系统的边界
2.能够聚焦在系统的核心元素上
3.帮助我们拆分系统
DDD的常用概念
领域
领域: 领域是有范围界限的,也可以说是有边界的
核心域: 核心域是业务系统的核心价值
通用子域: 所有子域的消费者,提供着通用服务
支撑子域: 专注于业务系统的某一重要的业务
界限上下文
理解: 语文中国的语境的意思
方式: 领域+界限上下文
目的: 不在于如何划分边界,而在于如何控制边界
领域模型
理解: 领域模型是对我们软件系统中要解决问题的抽象表达
领域: 反应的是我们业务上需要解决的问题
模型: 我们针对该问题提出的解决方案
回到微服务的设计原则上
要边界清晰的微服务,而不是泥沙小单体
要领域驱动设计,而不是数据驱动设计,也不是界面驱动设计
要职能清晰的分层,而不是什么都放的大箩筐
要做自己hold住的微服务,而不是过度拆分的微服务
数据驱动设计: 一个系统,将模块拆分完,然后需求分析,分析完。第一,去设计数据库,设计表,表内包含哪些字段。
缺点:开发快,不易维护
缺字段,加字段,拆分表,加表
界面驱动设计: 界面上缺什么就设计什么
微服务过多的情况下:
会导致软件维护成本的增生,因为服务多了,每个环节每个服务之间都会有一个成本的上升,集成成本,运维成本以及监控和定位的成本。尤其是测试成本和监控和定位的成本会成指数往上增加。