关于一次领域开发的复盘

简介: 既然是实际线下业务的开发,不要以为业务实现简单就不分析做概要设计,因为你无法预知市场的变动是不是如你想象的简单。有时候前期的设计不是为了本次的开发,而是为了下一次需求变更迭代的风险工时评估。

DDD领域设计的好处不是个人认知而是众所周知:统一业务概念促进业务建模、驱动微服务架构、增加代码服务率可读性等等。之前用DDD做过一个商城商品管理的后端开发。曾经因为变更需求推翻过初期的实现,想想也是心塞。复盘一下,加深以下对领域设计的认知,也避免出现同样的瞬时认知误差导致操作失误。
原始确认下来的对商品管理以及库存管理的认知,是以下图的黑色字体部分。商品部分无非就是基础信息的管理以及状态管理;而库存管理就是要注意的处理入库、出库、预占、流水还要注意以下并发操作。so easy,不用分析画图了,就两个简单域,建库,开发。
然而过了一周后,实现了一半后,“甲方”说我的商品有很多销售条件啊,属性啊,层次级别啊......要放在商品信息中。【附:以下图的红色部分就是改动】经过一番理论,这些东西属于商品域的被确认下来,我顿时一脸懵圈。WHAT......开发时间用掉一半的我有点紧迫感,基于这些东西属于商品域 开始胡思乱想了(其实要放在商品信息中这句话挺误导的)。开始对商品进行拆表,重新分析库存还是当初我认识的那个库存吗(因为销售属性的加入,商品上下架状态移到了库存上面)。数据库结构一变,思维惯式开始觉得以前的设计都是错的,要推翻重写。就像新增商品,就不是新增商品基础属性,还要新增销售属性(其实这时候已经让领域能力层和应用层腐蚀掉了)。其实,如果当时有时间把图画一画分析一下,会发现,其实商品基础信息还是那些基础信息,而销售属性,他们是属于商品域下的另外一个子域,而完整的商品,是几个子域的聚合,这个聚合就是一个业务商品的概念。代码根本不用推翻,要重新思考的增加应用服务的业务线。
image
总结一下tips避免再次踩坑To myself把:
(1)既然是实际线下业务的开发,不要以为业务实现简单就不分析做概要设计,因为你无法预知市场的变动是不是如你想象的简单。有时候前期的设计不是为了本次的开发,而是为了下一次需求变更迭代会议的风险评估和工时预测。
(2)开始开发了,就要确保领域不被侵入,或者说领域边界逐渐模糊。像上面加入的商品销售属性,他是商品域的,但是他区分于基础信息子域,他跟其他子域合做才能构成一个完整的业务概念。不要模糊。
(3)讨论需求变更的时候忌抓住一个观点变是非,忌思维定势,可以转变一下观念,比如认知我们的都没错,是边界都模糊了吗?
(4)此外,多表分页查询除了hibernate、mybatis写多表关联查询语句、以及前端异步请求信息外[/思考]还有啥攻略

目录
相关文章
|
6月前
|
安全 测试技术
测试团队的一次复盘实践
测试团队的一次复盘实践
226 0
|
3月前
|
敏捷开发 移动开发 前端开发
敏捷开发的全过程问题之明确需求的负责人和任务拆解的问题如何解决
敏捷开发的全过程问题之明确需求的负责人和任务拆解的问题如何解决
|
6月前
|
运维 监控 安全
如何写复盘报告
该内容是关于IT公司中复盘报告的撰写指南,主要包括五个步骤:1) 还原故障基本信息,如定级参考;2) 描述处理过程,按时间顺序列出关键点;3) 评估影响范围,可能涉及业务基线;4) 确定故障原因,从直接原因到根本原因层层分析;5) 分析责任归属和事件级别。复盘还包括故障回顾,提出优化措施以减少重演。内容还提到了一些参考资料,用于深入学习稳定性保障。
193 0
|
6月前
|
缓存 前端开发 JavaScript
前端项目重构的一些思考和复盘
前端项目重构的一些思考和复盘
148 1
|
6月前
|
安全 测试技术
面试题2:测试人员何时参与需求分析,并且要分析需求的哪些方面?
面试题2:测试人员何时参与需求分析,并且要分析需求的哪些方面?
面试题2:测试人员何时参与需求分析,并且要分析需求的哪些方面?
|
6月前
|
测试技术
如何做需求评审?
如何做需求评审?
|
前端开发 C++
浅谈复盘的道法术器
人的经历太有限了,如果凡事都要自己经历过才能有所领悟,这样的效率太低。丹麦一位哲学家克尔凯郭尔曾说过:人生需要回望才能理解。对于一个组织、一家企业也是如此。复盘是我们突破经历限制,从过往挖掘提升的一个有效方式。因工作契机,前段时间对复盘进行了系统性的研究和升级。期间查阅了大量资料、书籍,也和一些专家做了交流,总结道法术器4个层面的关键点,希望对你有所帮助。1、你是不是也遇到过这类问题?实际复盘的效
329 0
浅谈复盘的道法术器
|
监控 数据可视化 Java
测试工程师如何做到初级测试管理(个人思考)?
测试工程师如何做到初级测试管理(个人思考)?
123 0
测试工程师如何做到初级测试管理(个人思考)?
|
运维 测试技术 项目管理
|
关系型数据库 MySQL 中间件