分析、设计和实现三个阶段完全脱节,最后开发出来的软件不能很好的满足业务需求,在未来也不能很好的适应需求变化进行功能演进,所以2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称DDD大受欢迎。
领域驱动本身是针对复杂系统设计的软件工程方法,它在战略层面有三个重要的点,一是聚焦业务核心价值,二是统一语言,三是业务领域性划分。
和其他设计思路比,领域驱动具备整个系统的全局视角,从需求出发,梳理出典型用户场景,实现业务逻辑、系统逻辑和部署逻辑的分析设计,打通问题域和解决方案域的壁垒,提供一揽子解决方案,使得领域模型成为系统演进的核心,从而消除设计和实现之间的mapping,进而获得易于理解、分层清晰、易于维护的软件系统。
负责向用户展现信息以及解释用户命令。更细的方面来讲就是:
a) 请求应用层以获取用户所需要展现的数据;
b) 发送命令给应用层要求其执行某个用户命令。
2. 应用层
很薄的一层,定义软件要完成的所有任务。对外为展现层提供各种应用功能(包括查询或命令),对内调用领域层(领域对象或领域服务)完成各种业务逻辑,应用层不包含业务逻辑。
3. 领域层
负责表达业务概念,业务状态信息以及业务规则,领域模型处于这一层,是业务软件的核心。
4. 基础设施层
本层为其他层提供通用的技术能力;提供了层间的通信;为领域层实现持久化机制;总之,基础设施层可以通过架构和框架来支持其他层的技术需求。
也就是我们的业务模型,描述的是系统业务逻辑中相关的模型,通过领域模型的交互完成一个业务里的用户用例。这部分模型和技术,实现和物理细节统统无关,是可以复用的,也是用来表达领域的术语,和业务人员交流的模型。
领域模型,其实是由领域+模型两个词组成。
领域,就是我们要解决的问题域,包括领域问题+领域环境,无论有没有软件,领域问题都是客观存着的,而且随着科学技术水平的发展,会不断的以不同的面貌呈现出来;而解决手段则是随着科学技术的进步不断演进螺旋式前进的。
领域环境,解决问题本质还是需要依赖环境,环境中最重要的部分就是科技水平,比如对于购物这个问题,比如去集市或者从货郎那购买;
近代人们通过邮购的方式也可以实现远程购物;现代汽车和冰箱普及以后,人们又通过超市商场进行大规模购物;互联网出现后,特别是有线带宽和移动通信带宽大幅提升后,电子商务又成为主流的零售手段。
模型,主要为解决手段服务的,不同的领域环境一般来说对应不同的模型。
就软件这种解决手段来说,需要用软件的代码元素来描述要解决的问题域和解决问题的业务流程,代码元素和领域问题里面的概念、流程间就存在一个映射,为了防止代码元素直接映射问题域的概念和流程,出现语义层次严重不匹配的情况,因为通用编程语言语义层次较低、特定问题域语义层次较高。
顾名思义就是供UI前端使用的模型。这些模型专门是为前端控件绑定数据服务的,我们称之为“View Model".
故名思议就是我们定义数据物理模型的Model,它描述的是物理存储结构,其字段对应数据库存储字段,例如ORM中的模型就是数据模型。
贫血模型是指领域对象里只有get和set方法(POJO),所有的业务逻辑都不包含在内而是放在Business Logic层。
充血模型大多业务逻辑和持久化放在Domain Object里面,Business Logic只是简单封装部分业务逻辑以及控制事务、权限等,这样层次结构就变成Client->(Business Facade)->Business Logic->Domain Object->Data Access Object。
正确的对问题域进行建模
使用正确的统一语言(uml、绘图、文字……)
领域应拥有和表达与当前问题域相关的完整信息
提供内置的日志记录支持
良好的单元测试覆盖
https://mp.weixin.qq.com/s?__biz=MzU4MjU3ODgyMA==&mid=2247483871&idx=1&sn=e14683799ad8f435ea8a7415f74740f8&chksm=fdb76634cac0ef22b0a177eebad2073cf9fc7674bb9e152a767ff07fc12d4e295e30eff8d25b&scene=7&key=6401b985c78d5340ee413948a39987cf8381c7bdeedf118e08b3a7e7d0ac7aed75b022d4d6521c991833f550ff634c7de765c012055a8cbe619839f3520c301b39eda0c5ac0f355d70484e37aeb30ef1&ascene=0&uin=OTc1NTk3NTE1&devicetype=Windows+10&version=62060834&lang=zh_CN&pass_ticket=topNEqKsG%2FcPA12XW0qjYj01FSPkegeMRADYELu%2BKUWBXtQvRaKnNq2vr8t0w4cX
https://mp.weixin.qq.com/s?__biz=MzI1OTkwMTM1Nw==&mid=2247483765&idx=1&sn=34c14a9fc5d464eca3d850f783bcaa77&chksm=ea7093b7dd071aa15d26bdf0aec852de3eafb346da64a49bc5dcc90d7dfdc139746a192f2ca7&scene=7&key=76592d25334d685aaea5add8f3a26c1aa3bd2e93b6a7082211d86eb791b4bb74869d73906a6e96d45702d3b92583ed54609a27d2b652af98a350fdca79de5cc1672cf40ad8b0faa88eb9e69e8600c4ee&ascene=0&uin=OTc1NTk3NTE1&devicetype=Windows+10&version=62060834&lang=zh_CN&pass_ticket=topNEqKsG%2FcPA12XW0qjYj01FSPkegeMRADYELu%2BKUWBXtQvRaKnNq2vr8t0w4cX
https://www.cnblogs.com/duanxz/p/9922170.html