zoukankan      html  css  js  c++  java
  • DDD领域驱动设计-案例-源码说明-Ⅴ

    1.案例说明

    1. 该源码为实际项目的脱敏版本,改造过程中,部分功能无法重现。由于售后涉及到订单服务,用户服务等这种跨系统的交互,在案例中基于防腐层做模拟实现。
    2. 案例的主要目是展示DDD应用传统项目的流程,具体实现功能的代码不是重点关注的对象,读者可主要了解业务流程,业务规则在分层目录中的实现。切不可对流程中的细节功能做过多分析。
    3. 构建实体与需求文档相对应,构建实体的合理性不在本例中过多讨论,本例前提是已经确定实体,聚合根后,具体编码落地的细节展示。
    4. 源码中所有实体(包括聚合根)均继承BaseEntity,实体的唯一主键均继承自BaseID。BaseEntity,BaseID是一个只包括uuid的基础值对像。
    5. 源码中所有的仓库层均继承BaseRepository接口,便于统一定义仓库的通用操作,如实体的保存,查询,移除(设置基础对象,基础接口,有助于统一管理实体和扩展实体的功能)。参考代码如下:
    /**
    * 基础仓库接口
    * 仓库的一些通用操作
    *
    * @author wl
    * @date 2021-9-27
    */
    public interface BaseRepository<T extends BaseEntity, ID extends BaseID> {
     
    /**
    * 保存实体
    *
    * @param t 实体
    * @return 数据字典
    */
    default T save(T t) {
    return t;
    }
     
    /**
    * 查询实体
    *
    * @param keyId 查询主键
    * @return 返回实体
    */
    default T find(ID keyId) {
    return null;
    }
     
    /**
    * 删除实体
    *
    * @param keyId 查询主键
    */
    default void remove(ID keyId) {
    }
     
    }
    View Code

    2.案例启动

    1. 本例采用SpringBoot构建一个微服务,依赖请参考pom.xml文件。
    2. 本例使用了数据库(mysql),相关的数据脚本,请在资源文件中查看,路径为:resources/static/demosql。
    3. 先在本地或服务器上面构建好数据库,导入数据表脚本。
    4. 修改application.properties,数据库的连接地址请修改为本地可连接的配置地址。
    5. 启动或调试DDDApplication.java,项目启动成功后,才可以测试整个流程。启动成功如图:

    3.案例测试

    1. 本例所用的订单信息,是虚拟设置的一个(在源码中可修改订单信息)。且只能基于这个订单号做售后补偿业务测试。
    2. 为了便于理解,请查看com.wangling.base.tool.ddd.compensate.CompensateControllerTest.java文件,作者编写了测试用例,读者可基于测试用例一步一步的测试或查看代码。

    1. 创建补偿单过程源码参考:
    @Override
    public long save(CompensateApplyCommand compensateApplyCommand) {
    // 应用层体现 业务流程:
    // 获取订单信息-基于防腐层获取
    OrderV orderV = compensateSelectFacade.getOrderResponse(compensateApplyCommand.getCompensateBillCommand().getSubOid());
    // 获取人员信息-基于防腐层获取
    UserResponse userResponse = compensateSelectFacade.getUserResponse(compensateApplyCommand.getCompensateBillCommand().getActuid());
    // 基于工厂创建实体
    CompensateBillA compensateBillA = compensateBillFactory.createCompensateBillA(compensateApplyCommand, orderV, userResponse);
    // 调用领域层处理保存的业务逻辑
    CompensateBillA compensateBillAdd = compensateBillA.process(compensateBillDomainService);
    // 调用仓库保存数据
    compensateBillRepository.save(compensateBillAdd);
    // 保存完成后,消息通知其他系统
    sendCreateMessage(compensateBillAdd);
    // 保存完成后,主动发起审核
    long coid = compensateBillAdd.getCompensateBillId().getCoid();
    check(CheckTypeEnum.AUTO_CHECK, coid, compensateBillAdd.getActuid());
    return coid;
    }
     
  • 相关阅读:
    更新github上的代码
    使用git上传项目代码到github
    解决jenkins插件列表为空的问题
    P3200 [HNOI2009]有趣的数列
    BZOJ3907 网格
    解决SDK下载时速度过慢的问题
    实用的Android代码片段集合(精)
    广播与服务(二)
    action使用大全
    广播与服务(一)
  • 原文地址:https://www.cnblogs.com/wlandwl/p/ddd_five.html
Copyright © 2011-2022 走看看