DDD(领域驱动设计)+SpringCloud的代码示例
一个微服务+DDD(领域驱动设计)的代码结构示例
</h1><div class="clear"></div><div class="postBody">
前有幸拜读过诸多大神关于DDD的实现落地等文章,学习较多,受益匪浅,在此推荐 :
https://www.cnblogs.com/hafiz/p/9388334.html
https://blog.csdn.net/k6T9Q8XKs6iIkZPPIFq/article/details/78909897
https://www.cnblogs.com/netfocus/archive/2011/10/10/2204949.html
https://blog.csdn.net/bluishglc/article/details/6681253
下面参考了DDD官方的结构,总结了前辈们的相关经验,再根据自身对微服务和DDD学习和理解,做了一个用SpringCloud搭建的最基本的结构例子。个人才疏学浅,如有雷同或是不当之处,望各位大佬见谅和帮忙指正。
首先引经据典 , 参考官方架构草图,DDD总体结构分为四层 : Infrastructure(基础实施层),Domain(领域层),Application(应用层),Interfaces(表示层,也叫用户界面层或是接口层),各个层面的作用下面介绍。
对于DDD的设计而言,最重要的是如何去划分领域,划分好边界。在代码设计上,之前有看到过大佬用模块(Modules)来进行上下文界定和划分。如图下 :
而对于微服务而言,就非常适合从业务上去划分以上的各个Modules,划分好各个业务板块。
微服务 + DDD,个人觉得应该是首先是从微服务的角度(如何划分微服务)考虑去划分大的业务模块,每一个微服务都应该是一个可以单独部署,各司其职的模块;
而在微服务实际开发中,结合DDD的思想去划分所有属于自己的领域。
如图示例,对于我这个Project而言,是模块已经划分好的微服务应用,代码设计上就分为 Infrastructure,Domain,Application,Interfaces :
Infrastructure 层 : 基础实施层,向其他层提供通用的技术能力(比如工具类,第三方库类支持,常用基本配置,数据访问底层实现)
Domain层 : 主要负责表达业务概念,业务状态信息和业务规则;是整个系统的核心层,几乎全部的业务逻辑会在该层实现。
Application层 : 相对于领域层,应用层是很薄的一层,应用层定义了软件要完成的任务,要尽量简单。
注 : 这里图里面所说的对内对外,对程序而言,事实上是从展现层调用应用层,应用层调用领域层,领域层或调用基础实施层。
Interfaces层 : 负责向用户显示信息和解释用户命令,请求应用层以获取用户所需要展现的数据(比如获取首页的商品数据)
以上,就是个人 对 微服务+DDD的代码结构示例,完整代码详见 https://github.com/EalenXie/springcloud-microservice-ddd
无论我们代码结构如何规划,也并非一成不变,应该从实际出发,去思考划分结构的意义。此例子是对于微服务+DDD反应到实际开发,代码的结构设计上的一种初步的思考与探索,一个样板工程,不应该成为我们对实际DDD思考与设计的限制,本例仅供参考。
感谢各位提出意见和支持。
<div id="blog_post_info">
<div class="clear"></div>
<div id="post_next_prev"><a href="https://www.cnblogs.com/ealenxie/p/9453483.html" class="p_n_p_prefix">« </a> 上一篇: <a href="https://www.cnblogs.com/ealenxie/p/9453483.html" title="发布于 2018-08-10 10:29">MapBeanConvert</a>
<br>
<a href="https://www.cnblogs.com/ealenxie/p/9618693.html" class="p_n_p_prefix">» </a> 下一篇: <a href="https://www.cnblogs.com/ealenxie/p/9618693.html" title="发布于 2018-09-10 13:11">AOP与Filter拦截请求打印日志实用例子</a>
</div><!--end: topics 文章、评论容器-->
</div>
#1楼
2018-08-30 14:15
<a id="a_comment_author_4054237" href="https://www.cnblogs.com/ZhangTrue/" target="_blank">疯子张</a></div><div class="feedbackCon">
</div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">
</div>
#2楼
[楼主]
2018-08-30 14:17
<a id="a_comment_author_4054239" href="https://www.cnblogs.com/ealenxie/" target="_blank">EalenXie</a></div><div class="feedbackCon">
感谢支持
https://pic.cnblogs.com/face/994599/20160719093549.png
</div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">
</div>
#3楼
[楼主]
2018-08-30 18:43
<a id="a_comment_author_4054540" href="https://www.cnblogs.com/ealenxie/" target="_blank">EalenXie</a></div><div class="feedbackCon">
https://pic.cnblogs.com/face/994599/20160719093549.png
</div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">
</div>
#4楼
2018-08-30 19:09
<a id="a_comment_author_4054549" href="https://www.cnblogs.com/gougouyangzi/" target="_blank">洋子小姐</a></div><div class="feedbackCon">
</div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">
</div>
#5楼
[楼主]
2018-08-30 20:12
<a id="a_comment_author_4054580" href="https://www.cnblogs.com/ealenxie/" target="_blank">EalenXie</a></div><div class="feedbackCon">
已修复,感谢支持
https://pic.cnblogs.com/face/994599/20160719093549.png
</div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">
</div>
#6楼
2018-09-18 11:08
<a id="a_comment_author_4069858" href="https://www.cnblogs.com/zdd-java/" target="_blank">达兔哥</a></div><div class="feedbackCon">
https://pic.cnblogs.com/face/993840/20170912152802.png
</div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">
</div>
#7楼
2019-05-07 17:11
<a id="a_comment_author_4249963" href="https://home.cnblogs.com/u/1286441/" target="_blank">当年的反应慢</a></div><div class="feedbackCon">
</div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">
</div>
#8楼
<span id="comment-maxId" style="display:none">4297595</span><span id="comment-maxDate" style="display:none">2019/7/10 下午7:19:11</span>
2019-07-10 19:19
<a id="a_comment_author_4297595" href="https://www.cnblogs.com/quyf/" target="_blank">quyf</a></div><div class="feedbackCon">
</div></div>
【推荐】阿里云双11返场来袭,热门产品低至一折等你来抢!
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
【提升】这个价值 50W 年薪的问题,终于被马老师说明白啦...
【推荐】天翼云双十一翼降到底,云主机11.11元起,抽奖送大礼
【提升】Java程序员年薪40W,他1年走了别人5年的学习之路
【推荐】流程自动化专家UiBot,体系化教程成就高薪RPA工程师
· 领域驱动设计实战--战略建模
· [.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店
· 我的“第一次”,就这样没了:DDD(领域驱动设计)理论结合实践
· C#进阶系列——DDD领域驱动设计初探(一):聚合
· 【DDD】领域驱动设计实践 —— 框架实现
» 更多推荐...
<div id="google_ads_iframe_/1090369/C2_0__container__" style="border: 0pt none;"><iframe id="google_ads_iframe_/1090369/C2_0" title="3rd party ad content" name="google_ads_iframe_/1090369/C2_0" width="468" height="60" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" srcdoc="" style="border: 0px; vertical-align: bottom;" data-google-container-id="2" data-load-complete="true"></iframe></div></div>
</div>
<div id="under_post_kb">
· 41次,55颗,100%成功!长三甲系列火箭的北斗缘
· 企业服务 2019 :务实者的游戏
· 12亿网民信息泄漏!4TB数据,无需密码谷歌云上查看
· 英特尔中国:截至2018年底女性员工占比33%
· DeepMind的Al不仅能打《星际争霸》,AlphaFold还能解析蛋白结构
» 更多新闻...
DDD(领域驱动设计)+SpringCloud的代码示例相关推荐
- C#进阶系列——DDD领域驱动设计初探(五):AutoMapper使用
前言:前篇搭建了下WCF的代码,就提到了DTO的概念,对于为什么要有这么一个DTO的对象,上章可能对于这点不太详尽,在此不厌其烦再来提提它的作用: 从安全上面考虑,领域Model都带有领域业务,让Cl ...
- DDD 领域驱动设计-三个问题思考实体和值对象(续)
上一篇:DDD 领域驱动设计-三个问题思考实体和值对象 说实话,整理现在这一篇博文的想法,在上一篇发布出来的时候就有了,但到现在才动起笔来,而且写之前又反复读了上一篇博文的内容及评论,然后去收集资料, ...
- DDD领域驱动设计浅谈
DDD领域驱动设计是什么 1 DDD是什么? DDD是领域驱动设计,是Eric Evans于2003年提出的,离现在有17年. DDD名为:Domain Driven Design (领域驱动设计) ...
- DDD领域驱动设计之聚合、实体、值对象
关于具体需求,请看前面的博文:DDD领域驱动设计实践篇之如何提取模型,下面是具体的实体.聚合.值对象的代码,不想多说什么是实体.聚合等概念,相信理论的东西大家已经知晓了.本人对DDD表示好奇,没有在真 ...
- 浅谈我对DDD领域驱动设计的理解
从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品 ...
- [转]浅析DDD(领域驱动设计)
最近在做一些微服务相关的设计,内容包括服务的划分,Restful API的设计等.其中比较棘手的就是Service的职责划分:如何抽象具有统一业务范畴的Model,使其模块化,又如何高度提炼并组合多模 ...
- 浅析DDD(领域驱动设计)
最近在做一些微服务相关的设计,内容包括服务的划分,Restful API的设计等.其中比较棘手的就是Service的职责划分:如何抽象具有统一业务范畴的Model,使其模块化,又如何高度提炼并组合多模 ...
- DDD 领域驱动设计落地实践:六步拆解 DDD
引言 相信通过前面几篇文章的介绍,大家对于 DDD 的相关理论以及实践的套路有了一定的理解,但是理解 DDD 理论和实践手段是一回事,能不能把这些理论知识实际应用到我们实际工作中又是另外一回事,因此本 ...
- DDD领域驱动设计-视频讲解+实战
目录 简介 解决的问题 过度耦合 现状 DDD的分层架构和构成要素 小结 分包应用 DDD领域驱动设计:实体.值对象.聚合根 DDD应用 战略建模 领域 限界上下文 需求分析 上下文映射图 战术建模- ...
最新文章
- 近来工作和面试一些人的感受(原)
- java 反射加实例化内部类
- 公司要上监控,选型调研下 Zabbix 和 Prometheus
- 哈尔滨工程大学计算机学院保研政策,哈尔滨工程大学计算机科学与技术学院(专业学位)计算机技术保研夏令营...
- 数据仓库专题(6)-数据仓库、主题域、主题概念与定义
- mongodb数据库导出备份
- php7 mcrypt模块_如何在php7.2/php7.3中安装mcrypt扩展?
- 李开复:拥抱美丽的网络应用模式——云计算
- ppt倒计时3分钟_老板发来200页PPT文件,让我翻译成英文,3分钟教你搞定
- Atitit prgrmlan topic--express lan QL query lan表达式语言 目录 1. 通用表达语言(CEL)	1 1.1. 8.2 功能概述	1 1.2. Ongl
- 微信小程序发送模板消息详细教程
- Java中this的用法
- 计算机怎么安错误,电脑安装iTunes提示安装程序发生错误如何解决
- 跳出舒适区发现更大的世界,来社科院杜兰金融管理硕士项目汲取能量挑战自我
- 如何在arm-linux下支持2T硬盘
- Android多线程理解
- ios降级鸿蒙,iOS 降级 13.3 系统方法,你成功了没
- Spark的搭建及实现单词统计
- iOS中SDK的简单封装与使用
- 【过关斩将】如何在工作中提高沟通能力?