软件是一种被建立用来帮助咱们处理现代生活中复杂问题的工具,它只是到达目的的一种方法(不是必定要使用软件)。 【手机、操做系统、IM、email】html
在启动一个软件项目时,咱们应该关注软件涉及的领域。软件的最终目的是增进一个特定的领域。为了达到这个目的,软件须要和他服务的领域相得益彰。
复制代码
为了建立一个好的软件,你必须知道这个软件到底是什么,主要解决什么领域的问题。程序员
一个领域本质上能够理解为一个问题域 。只要肯定了软件所属的领域,那么这个领域的核心业务(基本问题)就基本肯定了。安全
让软件成为该领域的映射。经过对领域进行建模(领域模型),对该领域模型进行实现。bash
为了让领域专家,设计人员,开发人员搭建沟通的桥梁。使用一门通用的语言。【UML、SQL】架构
领域驱动设计的核心是创建正确的领域模型。【怎么创建领域模型】app
步骤:框架
1. 以一种领域专家、设计人员、开发人员都能理解的通用语言做为相互交流的工具,在交流的过程当中发现领域概念,而后将这些概念设计成一个领域模型;
2. 由领域模型驱动软件设计,用代码来实现该领域模型;
复制代码
实体(entity):在整个系统的生命周期中拥有惟一的标识符的对象。(不该该给实体定义太多的属性或行为,而应该寻找关联,将属性或行为转移到其余关联的实体或值对象上。)【用户user拥有惟一标识,大学university拥有惟一的标识】模块化
值对象(value objects):若是两个对象全部属性的值都相同,咱们会认为它们是同一个对象,那么就能够把这种对象设计为值对象。没有标识符的一个对象、不可变 的,即全部属性都是只读的,因此能够被安全的共享。【用户user的地址信息address,大学专业】函数
领域服务(services): 领域中的一些概念不太适合建模为对象(实体对象或值对象),由于它们本质上就是一些操做、动做,而不是事物。这些操做每每须要 协调多个领域对象。若是强行将这些操做职责分配给任何一个对象,则被分配的对象就是承担一些不应承担的职责,从而会致使对象的职责不明确很混乱。DDD认为领域服务模式是一个很天然的范式用来对应这种跨多个对象的操做。通常的领域对象都是有状态和行为的,而领域服务没有状态只有行为。【操做的集合,好比加密操做】工具
模块(moudles): 对于一个大型的复杂应用而言,领域模型趋向于愈来愈大,模型到达了一个做为总体很难讨论的点,理解不一样部件之间的关系和交互变得很困难。基于此缘由,颇有必要将模型组织进模块。模块被用来做为 组织相关概念和任务以便下降复杂性的一种方法。而另外一个缘由则是模块能够提升代码质量和可维护性,好比咱们常说的高内聚,低耦合就是要提倡将相关的类内聚在一块儿实现模块化。 模块应当有对外的统一接口供其余模块调用,好比有三个对象在模块a中,那么模块b不该该直接操做这三个对象,而是操做暴露的接口。模块的命名也颇有讲究,最好可以深层次反映领域模型。
聚合(aggregate):它经过定义对象之间清晰的所属关系和边界来实现领域模型的内聚,并避免了错综复杂的难以维护的对象关系网的造成。聚合定义了一组具备内聚关系的相关对象的集合,咱们把聚合看做是一个修改数据的单元。一个聚合中能够包含多个实体和值对象,所以聚合也被称为根实体。【聚合中的对象密不可分】
工厂(Factory):体现封装思想的模式。用来封装建立一个复杂对象尤为是聚合时所需的知识(变量),工厂的做用是将建立对象的细节隐藏起来。实体和聚合一般会很大很复杂,根实体的构造函数内的建立逻辑也会很复杂。实际上经过构造器努力构建一个复杂的聚合也与领域自己一般作的事情相冲突,在领域中,某些事物一般是由别的事物建立的(例如电器是在组装线上被建立的)【所需即所得】
仓库(Repository):资源库用于保存和获取聚合对象。【为了数据落地】
...
专一于展示领域模型。
将一个复杂的程序切分红层开发每个层中内聚的设计,让每一个层仅依赖于它底下的那层。遵守标准的架构模式以提供层之间的低耦合。【将领域模型相关的代码从界面层、应用层和基础设施层分隔出来】
用户界面/展示层
负责向用户展示信息以及解释用户命令。(请求应用层以获取用户所须要展示的数据;发送命令给应用层要求其执行某个用户命令;)
应用层
很薄的一层,定义软件要完成的全部任务。对外为展示层提供各类应用功能(包括查询或命令),对内调用领域层(领域对象或领域服务)完成各类业务逻辑,应用层不包含业务逻辑。
领域层
负责表达业务概念,业务状态信息以及业务规则,领域模型处于这一层,是业务软件的核心。
基础设施层
本层为其余层提供通用的技术能力;提供了层间的通讯;为领域层实现持久化机制;总之,基础设施层能够经过架构和框架来支持其余层的技术需求;
用例分析法、DDD的方法、四色建模法
某我的(Party)的角色(PartyRole)在某个地点(Place)的角色(PlaceRole)用某个东西(Thing)的角色(ThingRole)作了某件事情(MomentInterval)。
PartyPlaceThing:简称PPT,用淡绿色表示,常见的PPT有:部门、岗位、人员、地点、物品等。
Description:简称Des,用淡蓝色表示,主要用来对PPT进行描述,常见的Des有:部门类型、岗位层级、人员类型、地点区域、物品分类等。
Role:用淡黄色表示,主要表示PPT在某个场景下扮演的角色,常见的角色有:财务类部门、管理类岗位、请假者、销售点、产品等。
MomentInterval:简称MI,用淡红色表示,主要表示在一刻或一段时间内发生的一件事情,常见的MI有:部门移动、岗位移动、员工离职、产品销售等。
MomentIntervalDetail简称MIDetail,用淡红色表示,主要表示MI的明细,常见的MIDetail有销售明细、入库明细、出库明细等。
复制代码