一、背景
前面说了很多关于DDD的理论,从书本到论证,再到总结,最终需要来一些实战性的内容,很多网友也比较期待DDD项目的代码工程。俗话说能动手,绝不吵吵。但是DDD着实有些台阶,想要完全掌握还需要深入虎穴。因此本文借助于之前的社交关系建模文章,这里给出博客,论坛类的DDD代码样例。
二、领域分析
2.1 核心领域
博客帖子域,用户会员域
2.2 支撑领域
审核域,账号认证,权益域
三、领域服务构建
3.1 领域服务分包
这里为了简单演示,因此基于包的形式作为领域服务,通过上面的领域分析我们可以知道,有两个核心服务,一个是blog/topic,另一个就是会员或者用户了。这里用两个包表示一下:com.coderman.domainservice:blogtopic,member
3.2 领域服务子包说明
XXXDO:数据库对象(data object) XXXBO:领域业务对象(Business object) XXXDTO:适配器对象,数据传输对象(data transfer object )
参考COLA分包策略 https://blog.csdn.net/significantfrank/article/details/110934799
1.领域服务包 这里为了演示方便,将每个领域都放在这个包下面,算是顶级包路径 com.coderman.domainservice
2.博客/帖子领域服务包 com.coderman.domainservice.blogtopic
2.1 控制层(适配器)包,子包有管理端(admin),web端(web) com.coderman.domainservice.blogtopic.adapter
2.2 应用层包,子包较多 com.coderman.domainservice.blogtopic.app 子包列表:
•clientimpl:服务对外透出的API实现包•command:命令模型•consumer:处理外部message•executor:处理request,包括command和query•query:查询包
2.3 客户端包,子包有api,dto com.coderman.domainservice.blogtopic.client
模拟dubbo框架下对外暴露服务接口,实现在应用层
2.4 领域包,子包较多 com.coderman.domainservice.blogtopic.domain 子包列表:
•ability:领域能力包•convertor:对象转换包•factory:对象工厂包•gataway:领域网关接口•model:领域模型包(子包有entity,event,valueobject)
2.5 基础设施包,子包较多 com.coderman.domainservice.blogtopic.infrast 子包列表:
•cache:缓存包—>对接缓存中间件•config:配置包–>对接配置中间件•dubbo:dubbo框架包–>对接依赖的dubbo适配包•ElasticSearch:搜索包—>对接搜索引擎•gatawayimpl:领域网关实现包•mapper:持久层包(子包有dao,dataobject)•mq:消息包(子包有consumer,provider)–>对接消息中间件•model:领域模型包(子包有entity,event,valueobject)•rest:对接rest风格的框架包,与dubbo包类似
3.用户会员领域包 com.coderman.domainservice.member 说明:这里把用户,会员权益,账号都放在一个领域里了,如果想继续完善的话可以继续分子领域
区别:分包策略与博客帖子领域类似,但是领域包下的业务模型包是分开的:com.coderman.domainservice.member.domain.model 子包列表:
•memberright:会员权益业务模型•user:用户信息账号业务模型
四、调用流程
4.1 博客发布流程
4.2 粉丝关注流程
五、代码说明
5.1 项目地址
该git地址下目前只有blogDemo一个项目工程,后续会加入其他业务场景的项目工程,敬请关注。https://gitee.com/codergit.com/dddin-action.git
5.2 项目包结构
5.3 项目说明
1.这里为了降低代码演示的难度,对mapper,cache,es,mq等做了mock服务,类似于一个空实现,当真正要引入对应技术中间件的时候只需要在对应子包下替换掉空实现即可。2.项目基本以纯Springboot工程演示,因此模拟不同业务逻辑的时候可以考虑在不同的包下实现,看看效果。
原文始发于微信公众号(神帅的架构实战):DDD代码实践篇–社交关系blog/topic
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/241706.html