其他分享
首页 > 其他分享> > DDD(领域驱动设计)思想解读及优秀实践|网盘XZ

DDD(领域驱动设计)思想解读及优秀实践|网盘XZ

作者:互联网

DDD领域驱动设计介绍

高清 威❤ itspcool

领域驱动设计是一种解决业务复杂性的设计思想,不是一种标准规则的解决方法。在领域驱动设计理念上,各路大侠的观点也是各有不同,能力有限、欢迎留言讨论。

DDD是什么
wiki释义:

领域驱动设计(英语:Domain-driven design,缩写 DDD)是一种通过将实现连接到持续进化的模型[1]来满足复杂需求的软件开发方法。领域驱动设计的前提是:

把项目的主要重点放在核心领域(core domain)和域逻辑
把复杂的设计放在有界域(bounded context)的模型上
发起一个创造性的合作之间的技术和域界专家以迭代地完善的概念模式,解决特定领域的问题
领域驱动设计是一种由域模型(墙裂推荐@阿白 的域模型系列)来驱动着系统设计的思想,不是通过存储数据词典(DB表字段、ES Mapper字段等等)来驱动系统设计。领域模型是对业务模型的抽象,DDD是把业务模型翻译成系统架构设计的一种方式。

DDD(领域驱动设计)思想解读及优秀实践-DDD 和微服务

DDD 的一个生命周期是这样的:在设计和实现一个系统的时候,这个系统所要处理问题的领域专家和开发人员以一套统一语言进行协作,共同完成该领域模型的构建,在这个过程中,业务架构和系统架构等问题都得到了解决,之后将领域模型中关于系统架构的主体映射为实现代码,完成系统的实现落地。而用什么方式去做领域模型的构建,方法是多样的,Alberto 自己就为此发明了 Event Storming(事件风暴),并成为了一种经典的 DDD 落地模式。

DDD(领域驱动设计)思想解读及优秀实践-实战

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.github.domain.repository.MerchantMapper">


    <select id="checkMerchantName" resultType="Integer">
        select count(0) from mechant
        where mechant_name=#{merchantName}
        <if test="exclude != null">
            and mechant_id not in
            <foreach collection="exclude" item="id" index="index" open="(" close=")" separator=",">
                #{id}
            </foreach>
        </if>
    </select>

</mapper>
package com.github.application.service;

import com.github.domain.entity.Merchant;
import com.github.infrastructure.base.resp.RespBody;
import com.github.interfaces.dto.AddStoreDTO;
import com.github.interfaces.dto.MerchantComeInDTO;

/**
 * @author EalenXie create on 2018/8/30 18:10.
 * 商户领域 Application 层 , 此层规定本服务中 商户领域 需要完成的任务和功能
 * 不包含任务业务规则或知识, 为领域对象 委托工作。
 * 以下为示例部分内容
 */
public interface MerchantService {
    /**
     * 获取商户信息(获取聚合根)
     *
     * @param merchantId 商户Id
     */
    RespBody<Merchant> getMerchant(Long merchantId);

    /**
     * 检查商户名称是否合法
     *
     * @param merchantName 商户名称
     * @param exclude      需要判断排除掉的商户Id 为空则无需排除(例如新增时无需排除,更新时排除自身)
     * @return 是否合法
     */
    boolean checkMerchantName(String merchantName, Long... exclude);

    /**
     * 商户 入驻(即商户在平台注册)
     */
    RespBody<Void> merchantComeIn(MerchantComeInDTO dto);

    /**
     * 商户 新增门店(商户可以新增一家或多家门店)
     */
    RespBody<Void> addStore(AddStoreDTO dto);


}

标签:商户,网盘,模型,领域,XZ,设计,驱动,DDD
来源: https://www.cnblogs.com/goprew/p/ddd.html