大话领域驱动设计——简介

32ba0cf635e7964132ea9314bfb1f127.png

如果说当下最热门的技术概念或架构思想,那么领域驱动设计(DDD)一定占有一席之地。

f065f62d4b593b2542bd0733c883d790.gif

上个系列,我讲了ABP vNext框架在微服务架构下的落地思路,而ABP vNext是基于DDD思想的完整框架之一,同时DDD也是微服务架构服务拆分的主流依据。无论想学好ABP还是微服务架构,首先要理解DDD。这一系列,我就从各个概念,结合在ABP vNext中的用法详细讲解DDD。

37866714a7cc0f47b609a1f0c9618661.gif

DDD是Domain Driven Design的缩写,中文翻译为领域驱动设计。首先要明确一点,DDD是一套方法论,主要面向软件设计的方法论。学习它首先要把它从具体的实现抽离出来,也要从微服务架构的概念里抽离出来,它们是相互独立的概念。而ABP框架是DDD思想的基础落地方案之一。所以是先学思想,再学落地。

d0108bf2139df7024d7a67368340f966.gif

DDD的核心是领域。领域又称为问题域,是对系统业务的抽象,意在将我们的重点放在需要解决的问题本身,而不是如何实现。DDD希望为业务专家(领域专家)和研发人员(技术专家)提供一套完整高效的沟通方式,并在此基础上由他们共同建立可快速落地的系统模型(领域模型)。在此工程中,业务专家不需要去关注技术实现,技术人员应该优先把精力放在理解业务本身而不是实现的细节。

82a2a3fe7738cd8c2e67e42dbfe5a72f.gif

DDD的核心产出结果是领域模型,在过去无论是传统软件工程方法或是基于UML的面向对象建模,软件设计过程都会产出多个不同维度的设计图,例如类图、顺序图、流程图……。但是这样存在一个问题,因为需求不断变更,每次变化我们都要花大量时间修改多个设计图。尤其对于进度比较急项目,经常会出现代码不断修改但是设计图没有足够的时间去维护。慢慢会导致设计图和实际代码不一致甚至区别很大,那么设计图将失去意义。而在DDD的思想中,所有的领域设计,都会绘制在一个图也就是领域模型图中,相当于将过去的多个图合成一个。那么我们改代码的同时,就很容易同步去修正领域模型。

后面的章节,我将从以下几个方面来深入介绍领域驱动设计:

   1. 战略设计和战术设计

   2. 分层架构

   3. 各项概念(实体、聚合、服务、DTO等)

   4. 实现方法

1ca0c9f639e30d02f4572223a287a90c.png

END

6f515dc237610c6e0bf7e1e95cbadba6.png

关注我获得

更多精彩

797518654ed032fdc746921a6cb3478f.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DOCKER存储驱动之DEVICE MAPPER简介

Device Mapper是一个基于kernel的框架,它增强了很多Linux上的高级卷管理技术。Docker的devicemapper驱动在镜像和容器管理上,利用了该框架的超配和快照功能。为了区别,本文使用Device Mapper指驱动中的框架,而devicemapper指Docke…

easyui datagrid plunges 扩展 插件

项目使用 springmvc4.x spring4.x hibernate4.x easyui 为了便于开发,扩展了easyui 的 datagrid 功能,下面直接贴上扩展代码: /*** context 指定为 项目上下文* index 如果定义多组dataGrid,index指定为对应的参数:一…

软件项目组织管理(八)项目质量管理

文章目录软件质量的重要性对质量的认识传统的认识新的认识质量与等级什么是质量什么是质量管理什么是软件质量软件项目管理的目标质量管理的过程质量管理发展的四个阶段戴明改进循环(PDCA循环)项目质量计划编制方法——质量标杆法影响项目质量的因素(5M1…

Ctrl与Caps Lock键的交换

转自:http://www.xiaozhou.net/exchange_ctrl_and_capslock_key-2012-07-20.html 感谢博主。 要换就把所有电脑的键位都换过来,不然反而容易出错。 转载记录一下,防止以后重装系统转载于:https://www.cnblogs.com/bugtags/p/4775886.html

最近的状态

现在都25岁了,马上要26岁了,最近人特别浮躁,什么都不想学,什么都不想做,感觉整个人都不在状态,这样下去肯定会被淘汰,调整好心态,调整好状态,冷静下来,保持危…

Avalonia跨平台入门第十九篇之语音播放

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表、聊天窗口、ListBox图片消息、窗口抖动、语音发送;今天趁着大周末的时间接着去…

软件项目组织管理(九)项目人力资源管理

文章目录什么是人力资源人力资源的特征什么是项目人力资源管理管理员工的关键所在马斯洛的需求层次理论赫兹伯格的双因素理论权力理论提高项目工作有效性的7种习惯人力资源管理过程人力资源管理的工具方法责任分配矩阵资源负荷资源平衡团队发展的5个阶段(塔克曼模型…

javax.jdo.option.ConnectionURL配置的问题

2019独角兽企业重金招聘Python工程师标准>>> Hive安装过程中出现 The reference to entity "createDatabaseIfNotExist" must end with the ; delimiter.问题,具体如下所示: [Fatal Error] hive-site.xml:132:95: The reference to…

设计模式21:State 状态模式(行为型模式)

State 状态模式(行为型模式) 动机(Motivation) 在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态的行为就可能完全…

java和C++之单例类双重检查加锁

1、Java public class Singleton {private volatile static Singleton instance;public static Singleton getInstance () {if (instance null) {synchronized (Singleton.class) {if (instance null) {instance new Singleton();}}}return instance;} } 2、C class Singlet…

基于Qt的光盘刻录开发

.转载于:https://blog.51cto.com/weiyuqingcheng/1921369

在 k8s 以外的分布式环境中使用 Dapr

在Dapr 文档和实践案例中多是推荐采用k8s, 其实我目前也是在k8s 上操作的,有公有云TKE,AKS,还有私有云的Rancher ,它并没有传闻中的那么难,而且我认为它非常容易上手。不过,我还是有很多人不愿意使用k8s 。…

软件项目组织管理(十)项目沟通管理

软件项目成功的主要因素 用户参与主管层的支持需求的清晰表述 沟通管理的目标 及时而适当地创建、收集、发送、储存和处理项目的信息。 沟通管理的过程 沟通规划信息发布绩效报告利益相关者管理 沟通渠道数目计算公式 Sn*(n-1)/2 S:沟通渠道数量 n&#xff1…

ubuntu 14.04 安装Java JDK

Linux 下安装配置 JDK7 自从从Oracle收购Sun近三年来,已经有很多变化。早在8月,甲骨文将“Operating System Distributor License for Java”许可证终结,这意味着第三方将不可以依据这一许可分发他们的软件包。  因此Ubuntu Linux已经开始禁…

shell 获取值 默认值

default0PAGE_PVcat a.log|awk {print $1}PAGE_PV${PAGE_PV:-${defaut}}转载于:https://blog.51cto.com/lihongyi/1567518

javascript原型链中 this 的指向

为了弄清楚Javascript原型链中的this指向问题,我写了个代码来测试: var d {d: 40};var a {x: 10,calculate: function (z) {return this.x this.y z this.d},__proto__:d};var b {y: 20,__proto__: a};var c {y: 30,__proto__: a};运行如下的代码…

C和指针之删除字符串第一次出现的子串

1、问题 函数首先先判断substr是否出现在str中,如果它并没有出现,返回0,如果出现,函数应该把str *中位于该字符串后面的所有字符复制到该子串的位置,从而删除这个子串,然后函数返回1,如果 *多次出现str中,函数只删除第1次出现的子串,函数的第2个参数绝不会被修改。 2、…

C# 中是否支持 Like 和 ln 条件的参数化查询 ?

咨询区 Tom Ritter.NET 中的参数化查询我一直都像下面这样写。SqlCommand comm new SqlCommand("SELECT * FROM Products WHERE Category_ID categoryid ", conn); comm.Parameters.Add("categoryid", SqlDbType.Int); comm.Parameters["categor…

软件项目组织管理(十一)项目风险管理、项目采购管理

什么是风险 可能给项目的成功带来威胁或损害的可能性。 风险管理的目标 对项目目标而言的正面事件的概率和影响结果最大化,把负面事件的概率和影响最小化。 风险承受度 从潜在回报中得到满足或快乐的程度。 应对风险的基本措施 规避接收减轻转移 什么是项目…

Java探索之旅(6)——对象和类

1.知识要点 假设&#xff1a; public ClassName{int data;String name;ClassName(){data1;}public static int getdata(){return data;}}</span> ❶含main()的为主类。多个类放在一个文件中&#xff0c;只能有一个主类。 ❷类可以不定任何构造方法(函数)&#xff0c;系统…