小团队也能做DDD-上篇(3)

简介: 小团队也能做DDD-上篇(3)

image.png


三、模块编码


传统的三层结构是web,service,dao,这个大伙都很熟悉,一个业务流程稍微复杂点会导致service里面的代码变成大泥球,我在上一份工作中,见过一个service类达到上万行,维护及其痛苦,怎么痛苦法呢,就是每次转测试,都会产生20多个bug,改完又会出现新的,一轮一轮无法收敛。我实在受不了,就跟项目经理申请重构,项目经理是不同意的,没办法只能立军令状,就开干了,最终一万多行代码变成4000行左右,bug终于收敛。


解决service层大泥球的一个方法是分离复杂性,把service分为应用层和领域层,这块内容可以参考王林在infoq的文章


https://www.infoq.cn/article/A3cgSUWuRulXHl2c_dUr,文章中提到了一个架构原则是业务和技术分离。领域层放业务逻辑,应用层放技术逻辑,复杂性降低,并且领域层更便于测试。


image.png


DDD战术设计就是把业务逻辑放到最核心位置,整洁架构和六边形架构也是如此,跟业务相关的代码写到实体,值对象和领域服务里面,一些事务,缓存等技术相关代码写到应用服务里面。


例说明:购物车有个操作是添加商品到购物车,应用层


ShoppingCartApplicationService把事务,缓存处理掉,核心业务逻辑在ShoppingCart这个领域对象里面。


领域层代码如下:


image.png


应用层代码如下:


image.png


四、总结



DDD的统一语言在软件开发过程中能帮助业务知识更好的传递,限界上下文能指导复杂系统的拆分,战术设计能帮助代码更好的分层。


有的公司虽然没有用DDD这么一套组合拳,可能已经在利用这些好的方法来开发软件,其实DDD提供一套方法论,也不是必须全部用上,完全可以只借鉴其中一部分。比如DDD的统一语言是通过降低业务知识的传递提升效率,可以应用到实际开发中。


举一个实际的例子,很多企业内部系统也采用了前后端分离,然后用前端开发和后台开发两拨人分别开发,再接口联调,联调成本很大,完全可以换一种方式,让后台开发来做前端,节省联调成本。

那这里可能有人有疑问,后台开发做前端会不会效率很低?其实只要让前端提供了架子和前端组件,再辅助一些组件使用文档和代码示例,后台开发完全可以很快上手,而节省的联调成本会很可观。


最后想说一句,方法论能提供指导,但也不要生搬硬套,需要根据自身情况进行裁剪,灵活运用。

相关文章
|
3月前
|
人工智能 安全 调度
AI工程vs传统工程 —「道法术」中的变与不变
本文从“道、法、术”三个层面对比AI工程与传统软件工程的异同,指出AI工程并非推倒重来,而是在传统工程坚实基础上,为应对大模型带来的不确定性(如概率性输出、幻觉、高延迟等)所进行的架构升级:在“道”上,从追求绝对正确转向管理概率预期;在“法”上,延续分层解耦、高可用等原则,但建模重心转向上下文工程与不确定性边界控制;在“术”上,融合传统工程基本功与AI新工具(如Context Engineering、轨迹可视化、多维评估体系),最终以确定性架构驾驭不确定性智能,实现可靠价值交付。
611 41
AI工程vs传统工程 —「道法术」中的变与不变
|
Kotlin
Kotlin教程笔记(21) -高阶函数与函数引用
Kotlin教程笔记(21) -高阶函数与函数引用
165 6
|
运维 Prometheus 监控
Spring Boot中使用Actuator监控应用状态
Spring Boot中使用Actuator监控应用状态
|
设计模式 存储 JavaScript
于领域驱动设计的理解
领域驱动设计DDD学习总结,主要参考Eric Evens的《Domain-Driven Design–Tackling Complexity in the Heart of Software》
359 0
|
安全 Java 数据库
Java新秀登场:深入了解Record类型
Java新秀登场:深入了解Record类型
2907 0
|
JavaScript jenkins Java
Jenkinsfile 脚本放置源码仓库
Jenkinsfile 脚本放置源码仓库
302 0
|
SQL 存储 Java
Spring 加强版 ORM 框架 spring-data-jdbc 入门与实践
前言 Spring 为了支持以统一的方式访问不同类型的数据库,提供了一个 Spring Data 框架,这个框架根据不同的数据库访问技术划分了不同的模块。上篇 《Spring 加强版 ORM 框架 Spring Data 入门》 介绍了不同模块遵循的通用规范,这篇我们来介绍下基于 JDBC 技术实现的 spring-data-jdbc 模块。
2553 0
Spring 加强版 ORM 框架 spring-data-jdbc 入门与实践
|
设计模式 数据可视化 测试技术
C++中的UML类图
C++中的UML类图
1690 0
C++中的UML类图
|
存储 运维 Cloud Native