DDD
文章平均质量分 89
方丈的寺院
公众号@方丈的寺院
展开
-
可落地的DDD(7)-战术设计上的一些误区
几年前我总结过DDD战术设计的一些可落地的经验,现在回过头来发现,当初对这些概念的理解还是没有到位。比如战术设计的各个模块是如协作的。哪些是问题空间问题,哪些是解方案空间问题这篇文章重新阐述下。......原创 2022-07-15 10:55:39 · 751 阅读 · 6 评论 -
可落地的DDD(6)-工程结构
几年前我在可落地的DDD的(2)-为什么说MVC工程架构已经过时总结了基于DDD的微服务工程结构是怎么样的。那篇文章重点阐述了与MVC架构的区别。导致一些细节没有讲清楚,本文结合最近两年的实践,再详细阐述下。...原创 2022-06-26 11:46:34 · 1162 阅读 · 2 评论 -
DDD-CQRS的落地案例
摘要在之前的文章DDD-CQRS能解什么问题中,阐述了什么是CQRS。但是并没有业务需求可以应用CQRS。最近需要处理一个文本增量更新的业务,经过需求分析后,尝试使用CQRS来解这个问题问题分析一个文本页面编辑,对象很大,之前是全量保存。涉及到的网络传输对象比较大,经常超时OOM,所以交互改成,只保存修改的部分,也就是增量更新。之前业务中没法使用CQRS,在于使用CQRS后,数据的维护变得...原创 2020-02-11 20:17:33 · 3686 阅读 · 0 评论 -
可落地的DDD(5)-战术设计
摘要本篇是DDD的战术篇,也就是关于领域事件、领域对象、聚合根、实体、值对象的讨论。也是DDD系列的完结篇。这一部分在我们团队争论最多的,也有很多月经贴,比如对资源库的操作应该放在领域服务还是领域对象中。聚合根应不应该暴露给外部,还是要转成DTO。这些问题我们讨论了大半年,最后大家基本达成了共识,在当前的业务规模下,这些问题没那么重要,可东可西。不会对代码的质量有啥大的影响。关于DDD的实...原创 2019-06-23 13:27:51 · 3667 阅读 · 1 评论 -
可落地的DDD(4)-如何利用DDD进行微服务的划分(2)
摘要在前面一篇介绍了如何通过DDD的思想,来调整单体服务内的工程结构,为微服务的拆分做准备。同时介绍了我们在进行微服务拆分的时候踩过的一些坑。这篇介绍下我们最终的方案,不一定对,欢迎留言讨论。微服务划分问题分析上篇介绍过我们一开始的服务划分标准一个领域一个服务的规则去拆分,同时为了保证领域的纯洁性,我们区分了领域服务,和前台服务。领域服务就是领域逻辑,不直接对前端暴露。前台服务组...原创 2019-06-02 12:38:55 · 4654 阅读 · 2 评论 -
可落地的DDD(3)-如何利用DDD进行微服务的划分
摘要前面两篇介绍了DDD的目标管理、DDD的工程结构调整。这篇讨论微服务的划分。微服务是目前后端比较流行的架构体系了,那么如何做好一个微服务的划分?一个微服务的粒度应该是多大呢?这篇主要介绍如何结合DDD进行领域划分。工程结构代码上篇介绍了可落地的DDD的(2)-为什么说MVC工程架构已经过时很多朋友留言说,有没有sample code,要不然太湿了,不是很明白。这里写了个sample。...原创 2019-05-30 23:11:53 · 3730 阅读 · 3 评论 -
可落地的DDD的(2)-为什么说MVC工程架构已经过时
摘要mcv是一种软件设计模式,最早由Trygve Reenskaug在1978年提出,他有效的解决了表示层,控制器层,逻辑层的代码混合在一起的问题,很好的做到了职责分离。但是在实际的编码实践过程中,你会发现这个模式随着服务的扩展,mvc的问题通常一个前后端分离的系统,后端工程系统结构图通常下面这样 1. 四层 controller/service/manager/mapper 2...原创 2019-05-21 22:36:17 · 2309 阅读 · 4 评论 -
我们团队是如何落地DDD的(1)
最近发现文章老是被窃取,有些平台举报了还没有用。请识别我的id方丈的寺院。摘要DDD领域驱动设计,起源于2004年著名建模专家Eric Evans发表的他最具影响力的著名书籍:Domain-Driven Design –Tackling Complexity in the Heart of Software(中文译名:领域驱动设计,之后进行了很多迭代和演化,不过大多没有脱离这本书讨论的范围。因...原创 2019-05-19 11:20:50 · 3180 阅读 · 4 评论 -
一次关于聚合根的激烈讨论
背景之前有同事在分享DDD在闲鱼商品详情页的实践时,大家对闲鱼团队领域建模关于商品详情页的聚合根建模表示不认同。因为这是面向页面建模,不是面向领域建模,将微服务拆分和领域建模混为一谈了于是我以聚合根定义作为引子,结合组内在实践DDD过程中,聚合根随着业务查询复杂而导致聚合根不断膨胀的问题,提出借鉴CQRS读写分离的理念,来解这个问题。详见DDD-CQRS能解聚合根的问题吗引发了大家对...原创 2019-10-22 22:03:42 · 1517 阅读 · 0 评论 -
DDD-CQRS能解什么问题
背景在DDD代码实践过程出现一些看起来很别扭的实现为了查询,领域聚合根无限扩大如商品详情页聚合根public class BrandAggr { /** * 唯一标识 */ private Long id; /** * 商品简介 */ private ItemInfoVal brandInfoVa...原创 2019-03-13 21:37:15 · 4437 阅读 · 0 评论 -
DDD-领域对象与领域服务
问题什么是领域对象什么是领域服务领域对象的行为,与领域服务的行为区别原因为什么把这么小的点拿出来讲,最开始在讨论中领域对象与领域服务时,觉得行为放在service/entity中区别不大,只是一个放置位置的问题,并不影响到代码的抽象和复用,所以没有实行。但是最近在推动产品进行DDD业务建模,发现这个问题非常重要,关系到代码是否清晰表达了业务,这个也是我们进行DDD的初衷。定义领域...原创 2019-02-20 21:31:05 · 9294 阅读 · 0 评论 -
领域模型驱动开发(1)
摘要习惯了MVC模式,习惯了敏捷开发,习惯了了小步快跑,还适合谈论领域驱动开发吗。领域开发是否就是慢节奏的开发, 本文结合自己的开发经历,和大家聊聊这个话题。一.业务代码是如何写烂的java web开发通常都是mvc模式,从早期的ssh主键到Spring+ Mybatis。所以通常一个工程的项目结构图就是controllerservicemanagerdao问题1:...原创 2018-06-17 20:47:18 · 2598 阅读 · 0 评论 -
领域模型驱动开发(2)-工程结构的调整
一. 背景目前很多的业务代码存在以下问题bean的创建太随意,基本就是一个需求一些对应的dto,vo,query bean。不同开发者对于同一个领域的东西有不同的bean,同一个开发者对于相同逻辑的bean,在经过2月+的时间,自己又定义出了一个差不多的bean -> 职责分散 不同开发者对于某块相同业务的逻辑校验放在了不同的service中 ->代码逻辑重复不同的后...原创 2018-08-04 20:35:16 · 3860 阅读 · 2 评论