DDD实战进阶第一波(二):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架一)

Wesley13
• 阅读 484

本系列文章

DDD实战进阶第一波(一):开发一般业务的大健康行业直销系统(概述)

DDD实战进阶第一波(二):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架一)

要实现软件设计、软件开发在一个统一的思想、统一的节奏下进行,就应该有一个轻量级的框架对开发过程与代码编写做一定的约束。

虽然DDD是一个软件开发的方法,而不是具体的技术或框架,但拥有一个轻量级的框架仍然是必要的,为了开发一个支持DDD的框架,首先需要理解DDD的基本概念和核心的组件。

一.什么是领域驱动设计(DDD)

 首先要知道DDD是一种开发理念,核心是维护一个反应领域概念的模型(领域模型是软件最核心的部分,反应了软件的业务本质),然后通过大量模式来指导模型设计与开发。

DDD的一般过程是:首先通过软件需求规格说明书或原型生成一个领域模型(类、类的属性、类与类之间的关系);然后根据模式(应该如何分层?、领域逻辑写在哪?与持久化如何交互?如何协调多对象领域逻辑?如何实现逻辑与数据存储解耦等)指导来实现代码模型。

二.为什么使用DDD

DDD能应对复杂性与快速变化:

1.从技术维度实现分层:能够在每层关注自己的事情,比如领域层关注业务逻辑的事情,仓储关注持久化数据的事情,应用服务层关注用例的事情,接口层关注暴露给前端的事情。

2.业务维度:通过将大系统划分层多个上下文,可以让不同团队和不同人只关注当前上下文的开发。

3.时间维度:通过敏捷式迭代快速验证,快速修正。

三.DDD核心组件

1.界限上下文:首先要将大系统划分层多个界限上下文,比如大健康行业直销系统可以划分为产品、经销商、订单等几个界限上下文,每个界限上下文有自己的领域逻辑、数据持久化、用例、接口等。每个界限上下文根据特点,具体实现方式又不同,比如有些界限上下文基本没有业务逻辑,就是增删改查,则可以使用CRUD最简单的模式;有些界限上线文有一定的业务逻辑,但对高并发、高性能没要求,则可以使用经典DDD模式;有些界限上下文有一定的业务逻辑,而且有高性能要求,则可以使CQRS模式。

2.实体:有业务生命周期,采用业务标识符进行跟踪。比如一个订单就是实体,订单有生命周期的,而且有一个订单号唯一的标识它自己,如果两个订单所有属性值全部相同,但订单号不同,也是不同的实体。

3.值对象:无业务生命周期,无业务标识符,通常用于模式实体。比如订单的收货地址、订单支付的金额等就是值对象。

4.服务:无状态,有行为,通常就是一个用例来协调多个领域逻辑完成功能。

5.聚合:通常将多个实体和值对象组合到一个聚合中来表达一个完整的概念,比如订单实体、订单明细实体、订单金额值对象就代表一个完整的订单概念,而且生命周期是相同的,并且需要统一持久化到数据库中。

6.聚合根:将聚合中表达总概念的实体做成聚合根,比如订单实体就是聚合根,对聚合中所有实体的状态变更必须经过聚合根,因为聚合根协调了整个聚合的逻辑,保证一致性。当然其他实体可以被外部直接临时查询调用。

7.服务:协调聚合之间的业务逻辑,并且完成用例。

8.仓储:用于对聚合进行持久化,通常为每个聚合根配备一个仓储即可。仓储能够很好的解耦领域逻辑与数据库。

9.工厂:用于创建复杂的领域对象,能够将领域对象复杂的创建过程保护起来。

QQ讨论群:309287205 

DDD实战进阶视频请关注微信公众号:DDD实战进阶第一波(二):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架一)

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
1年前
DDD领域驱动设计思想——读《DDD实战课》归纳
本文是学习极客时间《DDD实战课》后结合自己思考所整理的归纳总结,课程链接在:DDD实战课基于DDD的微服务拆分与设计(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Ftime.geekbang.org%2Fcolumn%2Fintro%2F238"DDD实战课基于DDD的微服
Wesley13 Wesley13
1年前
DDD领域驱动
DDD领域驱动领域驱动模型。模型驱动代码接触到需求第一步就是考虑领域模型,而不是将其切割成数据和行为,然后数据用数据库实现,行为使用服务实现,最后造成需求的首肢分离。DDD让你首先考虑的是业务语言而不是数据,重点不同导致编程世界观不同。具体的问题,具体解决,以后遇到相同的问题,这个问题就成了领域DDD是解决复杂中大型软件的一套行之有效方式,在
Wesley13 Wesley13
1年前
DDD领域驱动设计
C进阶系列——DDD领域驱动设计初探(七):Web层的搭建(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Flandeanfen%2Fp%2F4920577.html)C进阶系列——DDD领域驱动设计初探(六):领域服务(https://w
Wesley13 Wesley13
1年前
DDD提升我的开发效率
!(https://oscimg.oschina.net/oscnet/up93aed604b4800d32bb7835fdac57273fe14.png)2019年参加了"领域驱动设计峰会2019"看到了国内、国外、不同行业在基于DDD的实践分享。成年热学习的一个特点就是带着自己的经验来思考接收到的内容,那么回顾自己接触DDD有一段时间,将自
Wesley13 Wesley13
1年前
DDD实战进阶第一波(十一):开发一般业务的大健康行业直销系统(实现经销商代注册用例与登录令牌分发)
前两篇文章主要实现了经销商代注册的仓储与领域逻辑、经销商登录的仓储与相关逻辑,这篇文章主要讲述经销商代注册的用例与经销商登录的查询功能。一.经销商代注册用例在经销商代注册用例中,我们需要传递经销商的基本注册信息,这个信息是做成了DTO对象。1.经销商注册的DTO对象:publicclassAddDealerDTO
Stella981 Stella981
1年前
Action On DDD
ActionOnDDD常见的开发方式MVC贫血模型最常见的开发模式传统EJB开发时提倡的开发模式,是通过算法调用数据对象的getter/setter方法修改数据,再将数据存储起来的过程。在MVC下,常见的模式是controller层中通过一部分算法
Stella981 Stella981
1年前
ML——Optimizers
Hello,wewillpushthemachinelearningflashcardeveryday!Pleasepaymoreattentionto数据科学实战!!(https://oscimg.oschina.net/oscnet/b6290f5874864c9483b20dd2ddd337c4.png)
Wesley13 Wesley13
1年前
DDD实战进阶第一波(六):开发一般业务的大健康行业直销系统(实现产品上下文仓储与应用服务层)
前一篇文章我们完成了产品上下文的领域层,我们已经有了关于产品方面的简单领域逻辑,我们接着来实现产品上下文关于仓储持久化与应用层的用例如何来协调领域逻辑与仓储持久化。首先大家需要明确的是,产品上下文的领域逻辑是系统的核心,它不应该依赖仓储,而仓储应该要依赖领域层,这样仓储才可以把领域逻辑执行完后,才可能将领域对象持久化到数据库中,这一点与传统的架构
密钥管理系统-为你的天翼云资产上把“锁
本文关键词:数据安全,密码机,密钥管理一、你的云上资产真的安全么?1.2021年1月,巴西的一个数据库30TB数据被破坏,泄露的数据包含有1.04亿辆汽车和约4000万家公司的详细信息,受影响的人员数量可能有2.2亿;2.2021年2月,广受欢迎的音频聊天室应用Clubhouse的用户数据被恶意黑客或间谍窃取。据悉,一位身份不明的用户能够将Clubho
数字先锋 | 药品信息何处有?尽在标识编码处
医药行业作为关系国计民生的重大基础性行业,是“中国制造2025”和战略性新兴产业的重点发展领域,也是健康中国建设的重要基础。近年来,在大力推进“健康中国”和“数字中国”两大时代背景下,数字技术已深入到药品开发、运用、保护、管理、服务等各个环节,助力医药企业