领域驱动入门学习
简介
在学习DDD的时候,需要对面向对象有一定的理解,很多人在开发工作中只是知道面向对象的三大特性封装、继承、多态。但是在实际工作当中可能很少会去关注这些。
面向对象回顾
在系统设计的时候,如何设计出一个好的项目,主要的两个核心原则就是常常听到的内聚和耦合
内聚
先看定义:内聚,表示内部间聚集、关联的程度、那么高内聚就是指要高度的聚集和关联,这里高的意思是指关系简单、明了
原则上创建专注的类,一个类只负责它所关心的类,存在较少逻辑上相关的操作。如果方法之间逻辑增加只需要创建一个新类.
例如下图中的策略模式,如果在有增加业务逻辑,可以在添加strategyD,这样增加新类,而不影响现有的业务逻辑
如果一个类带有多个责任,那么这个类就会有很多改变的原因,所以这个类也是个低内聚的类。
工作中,也经常碰到类似的场景,就是一个通用性的方法,定义了很多个参数,即支持添加、也支持修改,这种方式其实让这个方法难以维护、方法或者类的职责模棱两可,无法区分方法参数的作用。
耦合
耦合时衡量类与类之间的依赖程度,如果有A,B两个类,每次修改A的时候都需要改B,那么就可以说他们耦合了。
为什么要学习领域驱动
领域驱动的核心是消化业务知识并且创建出反映它的软件模型。是面向对象的最佳实践.
1.战略设计
战略设计是为了帮助我们理解整个系统的领域划分,分为:
领域/子域划分
通用语言
限界上下文
架构
2.战术建模
战术建模帮助我们设计DDD模型中各个部件,包括以下几个部分:
1.聚合
2.实体
3.值对象
4.领域服务
5.领域事件
通用语言
在讨论需求阶段或者是在交流的过程中,由于业务人员和开发人员关注点不同,导致一些术语叫法不同,导致涵义不一样。
通用语言的目的是定义一种开发、产品、
业务人员都可以理解的通用术语
如何定义通用语言
通用语言是在会议和需求探讨中慢慢形成的,并且通用语言的形式在任何形式上,比如口头、文档、注释等都可以用来描述通用语言,
而且不单单是在沟通、交流方面需要制定通用语言,在代码开发当中也要确定方法或者类的叫法,避免混淆
作为领域专家(任何业务相关人员),如果这个语言包含的任何术语和概念在领域里不存在,或者没有清楚的印证流程或业务概念,你就应该毫不犹豫的接受它们
举例:
1.比如两个省的人,有各自的方言(业务人员,开发人员),如果让他们两个交流,那么理解起来可能会有很多歧义。
所以有了普通话(通用语言),两个人都用普通话交流那么他们之间交流起来就不会有那么多歧义或者不理解的地方。
注意:在和产品或者业务交流的过程中,不要把一些例如数据库操作、创建表等等这些告诉他们,这些只是技术细节,不属于业务范围内,应该讨论业务相关的知识,细节和实现相关的的问题放在内部会议讨论