关于ddd:领域驱动设计实践

11次阅读

共计 1399 个字符,预计需要花费 4 分钟才能阅读完成。

  • 文章内容全副来自张逸《畛域驱动设计实际(策略 + 战术)》

畛域驱动是什么

畛域驱动设计就是针对软件开发畛域提出的一套零碎与实践分析方法,是“一种思维形式,也是一组优先工作,它旨在减速那些必须解决简单畛域的软件我的项目的开发”。畛域驱动设计贯通了整个软件开发的生命周期,包含对需要的剖析、建模、架构、设计,甚至最终的编码实现,乃至对编码的测试与重构。
畛域驱动设计强调畛域模型的重要性,并通过模型驱动设计来保障畛域模型与程序设计的统一。从业务需要中提炼出对立语言(Ubiquitous Language),再基于对立语言建设畛域模型;这个畛域模型会领导着程序设计以及编码实现;最初,又通过重构来发现隐式概念,并使用设计模式改良设计与开发品质。

策略设计阶段

问题域方面

针对问题域,引入限界上下文(Bounded Context)和上下文映射(Context Map)对问题域进行正当的合成,辨认出外围畛域(Core Domain)与子畛域(SubDomain),并确定畛域的边界以及它们之间的关系,维持模型的完整性。

架构方面

通过分层架构来隔离关注点,尤其是将畛域实现独立进去,可能更利于畛域模型的单一性与稳定性;引入六边形架构能够清晰地表白畛域与技术基础设施的边界;CQRS 模式则拆散了查问场景和命令场景,针对不同场景抉择应用同步或异步操作,来进步架构的低提早性与高并发能力。

战术设计阶段

整个软件系统被合成为多个限界上下文(或畛域)后,就能够分而治之,对每个限界上下文进行战术设计。

演进的畛域驱动设计过程


策略设计会管制和合成战术设计的边界与粒度,战术设计则以实证角度验证畛域模型的有效性、完整性与一致性,进而以演进的形式对之前的策略设计阶段进行迭代,从而造成一种螺旋式回升的迭代设计过程。

意识分层架构

经典分层架构


畛域驱动设计分层架构

档次 职责
用户界面 / 展示层 负责向用户展示信息以及解释用户命令
应用层 很薄的一层,用来协调利用的流动,它不蕴含业务逻辑,它不保留业务对象的状态,但它保有利用工作的进度状态
畛域层 本层蕴含对于畛域的信息,这是业务软件的外围所在。在这里保留业务对象的状态,对业务对象和它们状态的长久化被委托给了基础设施层
基础设施层 本层作为其余层的撑持库存在。它提供了层间的通信,实现对业务对象的长久化,蕴含对用户界面层的撑持库等作用

分层的根据与准则

分层的第一个根据是基于关注点为不同的调用目标划分档次。
分层的第二个根据是面对变动。
层与层之间的关系应该是正交的。
保障同一层的组件处于同一个抽象层次。

分层架构的演变

分层架构是一种架构模式,但终归它的目标是为了改良软件的架构品质,咱们在使用分层架构时,必须要恪守架构设计的最高准则,即建设一个高内聚、松耦合的软件系统架构。

整洁架构

在架构设计时,咱们应设计出洁净的应用层和畛域层,放弃它们对业务逻辑的专一,而不掺杂任何具体的技术实现,从而实现畛域与技术之间的齐全隔离,这一思维被 Robert Martin 称之为整洁架构(Clean Architecture)。

畛域模型就是业务逻辑的模型,它应该是齐全纯正的。
对下,例如,针对数据库、音讯队列或硬件设施,能够认为是一个南向网关,对于以后限界上下文是一种输入的依赖;
对上,例如,针对 Web 和 UI,能够认为是一个北向网关,对于以后限界上下文是一种输出的依赖。

六边形架构


六边形架构通过内外两个六边形为零碎建设了不同档次的边界。

微服务架构

正文完
 0