关于领域驱动设计 DDD(Domain-Driven Design)

时间:2022-08-31 12:41:03

以下旨在 理解DDD。

  1. 1.     什么是领域?

妈妈好是做母婴新零售的产品,应该属于电商平台,那么电商平台就是一个领域。

同一个领域的系统都有相同的核心业务

eg: 电商领域都有:商品浏览、购物车、下单、减库存、付款交易等核心环。

 

同一个领域要解决的问题 应该是类似的。

 

  1. 2.     什么领域驱动设计DDD?

DDD是一种基于模型驱动开发的软件开发思想,

强调领域模型是整个系统的核心,领域模型也是整个系统的核心价值所在。

每一个领域,都有一个对应的领域模型,领域模型能够很好的帮我们解决复杂的业务问题。

 

DDD中,我们总是以领域为边界,分析领域中的核心问题(核心关注点),然后设计对应的领域模型,再通过领域模型驱动代码实现。

而像数据库设计、持久化技术等这些都不是DDD的核心,而是外围的东西

 

  1. 3.     概念总结
  1. 领域就是问题域,有边界,领域中有很多问题;
  2. 任何一个系统要解决的那个大问题都对应一个领域;
  3. 通过建立领域模型来解决领域中的核心问题,模型驱动的思想;
  4. 领域建模的目标针对我们在领域中所关心的问题,即只针对核心关注点,而不是整个领域中的所有问题;
  5. 领域模型在设计时应考虑一定的抽象性、通用性,以及复用价值;
  6. 通过领域模型驱动代码的实现,确保代码让领域模型落地,代码最终能解决问题;
  7. 领域模型是系统的核心,是领域内的业务的直接沉淀,具有非常大的业务价值;
  8. 技术架构设计或数据存储等是在领域模型的外围,帮助领域模型进行落地;

 

关于其他:

 

 熟悉DDD,理解DDD仅仅是个基础,我们需要去 学会 领域建模,领域拆分,,领域细分等,成为该领域的专家。

 

参考文章:http://www.cnblogs.com/netfocus/p/5548025.html

 ************

浅析VO、DTO、DO、PO的概念、区别和用处     ,结合这篇文章,谈谈VO 、DTO的区别

自己的理解

VO(View Object): 是需要Controller 层返回给页面的,即返回到ResponseBody 中

某Controller class 中的方法:

   @RequestMapping("basic")
    @NotAuth
    public Object basicInfo(HttpServletRequest request,HttpServletResponse response,String k){
 
        try {
          
            // 省略...
            Map<String,Object> result = Maps.newHashMap();
       
            result.put("register",register);
            result.put("firstDate",date);
            result.put("max",max);
            result.put("total",total);
           CommonResultVo vo = new CommonResultVo(); vo.setResult(result); return vo;
        } catch (ActsysBizException e) {
            return ErrorResponse.newInstance(-1,"用户未登录");
        }catch (Exception e){
            logger.error("<育儿清单>获取基本信息异常"+StackTraceLogUtil.getStackTraceAsString(e));
            return ErrorResponse.newInstance(-11,"系统异常");
        }
    }    

  

DTO(Data Transfer Object):数据传输对象。DTO代表服务层需要接收的数据和返回的数据,而VO代表展示层需要显示的数据

      (1) 说白了就是Controller 如果调用的对象,即服务的对象是 视图层比如:H5,app移动端,网页,返回的都是DO对象;

      (2) 如果调用的对象是 另一个微服务组件中的某个Servicef方法,比如  活动系统服务于页面,它返回给页面的是一个DO对象,

      而活动系统组成DO对象的时候,需要调用会员系统的某些接口,那么会员系统返回给活动系统的就是DTO对象了

   关于领域驱动设计 DDD(Domain-Driven Design)