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思考与设计的限制,本例仅供参考。

感谢各位提出意见和支持。

 

分类: Java
<div id="blog_post_info">
9
0
<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>
posted @ 2018-08-30 14:04  EalenXie 阅读( 18986) 评论( 8) 编辑 收藏
</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">
666
		</div>
	</div>
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;
			</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://i-blog.csdnimg.cn/blog_migrate/fd8584600c3cbf1490fd328bbaeb7ae6.png
		</div>
	</div>
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;
			</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">
抱歉各位,之前Github代码空包没有提交,现在已经修复,更新了github地址 : https://github.com/EalenXie/springcloud-microservice-ddd
https://i-blog.csdnimg.cn/blog_migrate/fd8584600c3cbf1490fd328bbaeb7ae6.png
		</div>
	</div>
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;
			</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">
我就说 怎么git访问不了你的这个地址
		</div>
	</div>
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;
			</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://i-blog.csdnimg.cn/blog_migrate/fd8584600c3cbf1490fd328bbaeb7ae6.png
		</div>
	</div>
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;
			</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">
6666
https://pic.cnblogs.com/face/993840/20170912152802.png
		</div>
	</div>
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;
			</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">
对于entity或者value,常常需要注入repositories 根据传入的参数进行级联加载,比如somebody.classmates(String name) 查找某个学生的同学,这个一般你怎么做呢?我的方案是aspectj+ltw,比较复杂,有没有简单的方案呢
		</div>
	</div>
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;
			</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>
    <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">
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值