DDD代码实践篇–社交关系blog/topic

一、背景

    前面说了很多关于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:处理外部messageexecutor:处理request,包括command和queryquery:查询包

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 博客发布流程

DDD代码实践篇--社交关系blog/topic

4.2 粉丝关注流程

DDD代码实践篇--社交关系blog/topic

五、代码说明

5.1 项目地址

该git地址下目前只有blogDemo一个项目工程,后续会加入其他业务场景的项目工程,敬请关注。https://gitee.com/codergit.com/dddin-action.git

5.2 项目包结构

DDD代码实践篇--社交关系blog/topic
WX20210413-112125.png

5.3 项目说明


1.这里为了降低代码演示的难度,对mapper,cache,es,mq等做了mock服务,类似于一个空实现,当真正要引入对应技术中间件的时候只需要在对应子包下替换掉空实现即可。2.项目基本以纯Springboot工程演示,因此模拟不同业务逻辑的时候可以考虑在不同的包下实现,看看效果。


原文始发于微信公众号(神帅的架构实战):DDD代码实践篇–社交关系blog/topic

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/241706.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!