基于 DDD 的微服务设计演示 2021-09-15 程序之旅,记录 3 条评论 1638 次阅读 ### 基于 DDD 的微服务设计演示 [TOC] #### 单 Service 实现数据查询 用单 Service 注入不同的 Dao,实现各种不同的查询。 > 大数据相关产品,运用大数据技术对海量的数据进行分析处理,并且最终的结果是通过各种报表来查询并展示。因此这些项目除了后台的各种分析处理以外,还要在前段展现各种报表,而且这些报表非常多且繁杂。同时,使用这个系统的都是决策型领导,报表的改变非常的频繁,因此我们需要具备快速开发报表的能力。 每个报表在 service 中的代码基本相同,从前端获取查询参数,然后调用 Dao 执行查询,最多再做一些翻页的操作。 1. 以往每个 Dao 都要写一个自己的接口,然后配置一个 Mapper,但 Dao 接口都长得一模一样,只是接口名与 Mapper 不同。 2. 过去的设计,每个 Service 都对应一个Dao,现在一个 Service 要对应很多个 Dao。 ```xml The application context for query ``` dao 的实现 ```xml select * from iot_device where 1 = 1 and id = #{id} limit #{size} offset #{firstRow} select count(*)from( ) count select ${aggregation} from( )aggregation ``` 如果是一些关联查询 ```xml The application context for query ``` 同时配置 join 的操作 ```xml ``` 补填就配置 AutofillQueryServiceImpl,不补填就配置 QueryServiceImpl 注意:如果配置的是 AutofillQueryServicelmpl, 除了配置 queryDao,还要配置 basicDao #### 数据补填对微服务的支持 当 Product 微服务要补填 Supplier 时,只能远程调用 Supplier 微服务的相应接口,数据补填必须要技术中台提供对微服务的相应支持。 ```xml ``` ##### Supplier 微服务提供 2 个查询接口 - Supplier loadSupplier(id),通过某个 id 进行查找 - `List loadSupplier(List ids)` 通过多个 id 进行批量查找 > - method 配置的是对单个 ID 进行查找的方法 > - listMethod 配置的是对多个 ID 批量查找的方法 #### 通用仓库与工厂的设计 DDD 的架构设计增加了仓库与工厂,除了读写数据库以外,还实现了对领域对象的映射与装配。传统的DDD设计,每个模块都有自己的仓库与工厂,创建出来后放到仓库的缓存中,供上层应用访问,当领域对象在经过一系列操作以后,最后通过仓库完成数据的持久化。 仓库和工厂对 Dao 替换的同时,还扩展了许多的功能,如数据的补填、领域对象的映射与装配、聚合的处理。 ![image-20210914232107187](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/image-20210914232107187.png) #### 原有的遗留系统要通过改造转型为 DDD - 通过邻域建模添加 vObj.xml - 将原来注入 Dao 改为注入仓库 PS: 至于真正的实现微服务的架构还需要很多的细节,需要工作的经验与学习的日积月累,领域模型的学习就先告一段落,接下来就是 DDD 如何与微服务 Spring cloud 技术工具的配合使用。 打赏: 微信, 支付宝 标签: java, 领域模型, DDD, 微服务 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
刚上厕所没带纸,正苦恼着该怎么办,结果刷到了大佬的文章,瞬间感觉人生没有什么坎是过不去的,不擦了,直接站起来走了,感谢大佬的分享
很久没有写博客了啊。
最近公司有点忙,学的都是管理上的知识,不好写博客的哦。