• DDD的落地,需要基础设施的大力支持


    1. 概览

    对于复杂业务,DDD 绝对是一把神器,由于它过于复杂,很多人望而却步。因为太过严谨,形成了很多设计模式、规范化流程,这些爆炸的信息已经成为 DDD 落地的重大阻力。

    但,如果我们将这些规范化的流程封装到框架,仅把核心业务逻辑暴露给开发人员,又会是什么样子?

    1.1. 背景

    在尝试使用 DDD 处理复杂业务之后,就难以回到 CRUD 的世界。相对于 CRUD 来说,DDD 具备一套完整的理论基础,提供了一组业务模式和规范用以应对复杂的业务流程。但,由于其概念繁多,通常还过于抽象,存在一定的门槛;加上过于规范,业务流程被拆分多个组件,大大增加了理解成本,也加大了开发人员的代码量。

    好在,由于规范所以产生了大量的最佳实践,日常开发中的众多业务场景均可完成抽象化、模板化甚至清单化,开发人员只需照“猫画虎”便可以完成DDD落地。而这些最佳实践,最好能够以“基础设施”的方式进行支持,降低入门门槛,提升开发效率。

    1.2. 目标

    1. 将模板流程全部内置于框架,让业务开发人员将更多的精力聚焦于领域模型;
    2. 支持领域模型的 创建 和 更新 两大业务场景,只做接口定义,不编写流程代码;
    3. 核心流程需具备 参数校验、业务规则验证、Command 和 Context 转换,状态持久化、领域事件发布等通用能力;
    4. 支持自定义流程,对于个性化场景,可通过编码方式完成业务流程,并快速与 CommandService 进行集成;

    2. 快速入门

    在设计上,CommandService 借鉴了 Spring Data 核心理念,在使用上也与 Spring Data 保存一致,以降低使用门槛。

    2.1. 环境搭建

    首先,在项目中引入 lego-starter,具体如下:

    1. <dependency>
    2.     <groupId>com.geekhalo.lego</groupId>
    3.     <artifactId>lego-starter</artifactId>
    4.     <version>0.1.10-command_service-SNAPSHOT</version>
    5. </dependency>

    然后,依次引入 validation 和 spring data jpa 支持

    1. <dependency>
    2.     <groupId>org.springframework.boot</groupId>
    3.     <artifactId>spring-boot-starter-validation</artifactId>
    4. </dependency>
    5. <dependency>
    6.     <groupId>org.springframework.boot</groupId>
    7.     <artifactId>spring-boot-starter-data-jpa</artifactId>
    8. </dependency>

    在 application 文件中添加 Datasource 配置:

    1. spring:
    2.   datasource:
    3.     driver-class-name: com.mysql.cj.jdbc.Driver
    4.     url: jdbc:mysql://127.0.0.1:3306/lego
    5.     username: root
    6.     password: root
    7.   jpa:
    8.     hibernate:
    9.       ddl-auto: update
    10.     show-sql: true

    新增
    SpringDataJpaConfiguration 配置类,完成对 spring data jpa 的配置,具体如下:

    1. @Configuration
    2. @EnableJpaRepositories(basePackages = {"com.geekhalo.lego.command"})
    3. public class SpringDataJpaConfiguration {
    4. }

    新增
    CommandServiceConfiguration 配置类,完成对 CommandService 的配置,具体如下:

    1. @Configuration
    2. @EnableC
  • 相关阅读:
    网站后台删除文章时,如何把内容中的图片也一并删除?
    贪心 Leetcode 135 分发糖果
    【JVM笔记】异常处理字节码指令
    计算机内功修炼:程序的机器级表示(C与汇编)
    Android界面开发基础
    Bitbucket 使用 SSH 拉取仓库失败的问题
    SHELL脚本学习(十三)初识 gawk 编辑器
    浏览器中location详解
    交叉编译 Qt5.12 armv8(aarch64) 带 WebEngine - NVIDIA JETSON TX2
    eyb:工资账套页面设计到聊天数据显示(五)
  • 原文地址:https://blog.csdn.net/m0_74931226/article/details/127883534