领域驱动设计总结——简介

简介: 本文为领域驱动设计系列总结的开篇,主要对领域驱动设计概念做个介绍,本系列领域驱动设计总结主要是在Eric Evans 所编写的《领域驱动设计》 一书的基础上进行归纳和总结。

本文为领域驱动设计系列总结的开篇,主要对领域驱动设计概念做个介绍,本系列领域驱动设计总结主要是在Eric Evans 所编写的《领域驱动设计》 一书的基础上进行归纳和总结。

一 背景

导致软件复杂的原因是什么?目标不清,资源缺乏,官僚主义等都有可能,但真正决定软件复杂性的是设计方法。当复杂性失去控制时,软件就会难以理解和维护,而好的设计则可以为开发复杂特性创造更多机会。设计的一些因素

是技术上的,比如分布式架构,网络,数据库等等,但大多数软件的复杂性不在技术上,而是来自于领域本身、用户的活动或业务。当这种领域的复杂性没有很好地解决时,基础技术的构思再好也无济于事。

成功的设计必须系统的考虑到软件的这个核心方面。所以大多数软件项目中,主要的焦点应是领域和领域逻辑, 复杂的领域设计应该基于模型。

二 什么是领域驱动设计?

2.1 基础概念

先来介绍几个术语概念,我结合书中内容对一些术语做出如下解释:

模型:一个抽象的系统,描述了领域的所选方面,可用于解决与该领域有关的问题。

领域:知识、影响或活动的范围。每个软件都是为了执行用户的某项活动,或是满足用户的某种需求,这些用户应用软件的问题区域就是软件的领域。

领域建模:对一类知识严格的组织且有选择的抽象,出于某种目的概括的反应现实,可以通过图或者代码,文字等表达。会根据领域的作用,而选择具体的领域模型。

所以什么是领域驱动设计?常见的定义是:领域驱动设计是一种通过将实现连接到持续进化的模型来满足复杂需求的软件开发方法。

但这个定义过于抽象,这里我根据本书内容总结下:

领域驱动设计:

领域驱动设计是一种思维方式,也是一组优先任务,它旨在加速那些必须处理复杂领域的软件项目的开发。其实质是通过消化吸收大量知识,最后产生一个反映深层次领域知识并聚焦于关键概念的模型,并以此模型驱动软件设计。

为什么使用领域驱动设计?

软件的核心就是其为用户解决领域相关的问题的能力,而通过领域驱动设计可以很好的实现这种能力。

其中领域驱动设计有两个前提:

  1. 1. 在大多数软件项目中,主要的焦点应该是领域和领域逻辑。
  2. 2. 复杂的领域设计应该基于模型。

维基百科上还多了个前提,不过本书中没有专门提到:

  • 让技术人员以及领域专家合作,以迭代方式来完善特定领域问题的概念模型。

2.2 模型在领域驱动设计中的作用

领域驱动设计本质还是创建领域模型,并以模型来驱动软件设计,所以这里需要介绍下模型在领域驱动的作用:

  1. 模型和设计的核心互相影响。模型与实现之间的紧密联系便于后续的维护和开发,我们也可以基于对模型的理解来解释代码。
  2. 模型是团队所有成员使用的通用语言中枢。由于模型与实现之间的关联,开发人员可以使用该语言来讨论程序,并和专家进行无障碍的沟通。
  3. 模型是浓缩的知识。模型是团队一致认同的领域知识的组织方式和重要元素的区分方式。透过我们如何选择术语、分解概念以及将概念联系起来。


三 领域驱动设计介绍

本篇是领域驱动设计的初步介绍,后面我将会通过以下几个方面对领域驱动内容进行总结和概括:

  1. 1. 如何运用模型
  2. 2. 如何构造领域模型
  3. 3. 如何发觉深层次模型
  4. 4. 如何设计大型系统
相关文章
|
存储 Java 开发者
领域驱动设计入门指南
领域驱动设计入门指南
252 0
|
前端开发 Java 数据库连接
领域驱动设计:从学习到实践(一)
产品同学将需求分析完和开发同学进行需求评审,评审完毕后开发同学开始基于需求进行设计,一般会落到数据库设计,将库表设计完毕后,再向上进行分层开发。如果是前后端分离的项目,会在前期约定接口,进行基于契约的并行开发。所以,我们称这种方式为数据驱动开发,或基于数据模型的开发。
领域驱动设计:从学习到实践(一)
|
26天前
|
存储 设计模式 数据可视化
DDD新手入门:领域模型设计的七个核心概念
小米,29岁程序员,分享领域模型落地知识。文章解析领域、子域、限界上下文、领域对象、聚合、工厂与仓库等概念,助你理解领域驱动设计。
56 1
|
5月前
|
中间件 BI 测试技术
【实践篇】领域驱动设计:DDD工程参考架构
领域驱动设计(DDD)参考架构旨在为团队提供DDD实践的起点,强调业务与技术的分离,考虑多种架构风格如分层、六边形等。它包括多限界上下文结构,每个上下文内有应用层(不含领域逻辑)、领域层(含领域模型和事件)和网关层。接入层负责外部请求的处理,业务层协调不同上下文。组件包括Start(启动)、Common(通用)、API、Facade、Application Service、External API、Query、Domain和Gateway,各组件有明确的职责和依赖关系,如Gateway处理技术细节并作为系统与外部的接口。架构设计是多因素权衡,适应实际工程需求。
261 0
|
缓存 前端开发 JavaScript
前端领域驱动设计的一些思考
前端领域驱动设计的一些思考
864 0
|
前端开发 架构师 Java
领域驱动设计DDD从入门到代码实践
在本文中,作者将借鉴《实现领域驱动设计》的做法,介绍领域驱动设计的基本概念的同时,用一个虚拟的公司和一个虚拟的项目,把领域驱动设计进行落地实践。
13441 9
领域驱动设计DDD从入门到代码实践
|
测试技术 微服务
领域驱动设计的基本概念有那些
领域驱动设计的基本概念有那些
|
存储 开发框架 Java
「软件设计」权威领域驱动设计(DDD)简介
「软件设计」权威领域驱动设计(DDD)简介
|
存储 设计模式 前端开发
浅谈领域驱动设计实践——董炎焱
近年来领域驱动设计(Domain Drive Design)大火。那么我们为什么要学习领域驱动设计,它适合用于哪些场景?怎么去用?在用的过程中,又有哪些需要注意的地方呢?
浅谈领域驱动设计实践——董炎焱
|
测试技术 领域建模
领域驱动设计基本概念答疑
领域驱动设计基本概念答疑