当前位置: 首页>Bootstrap>领域模型驱动设计(Domain Driven Design)入门概述

领域模型驱动设计(Domain Driven Design)入门概述

时间:2015-06-27 17:29 来源:网络整理 作者:KKWL 点击:
软件开发要干什么: 反映真实世界要自动化的业务流程 解决现实问题 领域Domain Domain特指软件关注的领域 在不能充分了解业务领域的情况下是不可能做出一个好的软件 领域建模 领域模

软件开发要干什么:

  • 反映真实世界要自动化的业务流程
  • 解决现实问题
  • 领域Domain

  • Domain特指软件关注的领域
  • 在不能充分了解业务领域的情况下是不可能做出一个好的软件
  •  领域建模




    领域模型驱动设计

    }  分层架构

    }  实体

    }  值对象

    }  服务

    }  模块

    }  聚合

    }  工厂

    }  资源库

     

    分层架构:


    }  将领域模型相关的代码集中到一个层中,把它从用户界面、应用和基础设施代码中分隔开来

    }  释放领域对象的显示自己、保存自己、管理应用任务等职责,让它专注于展现领域模型

    }  复杂的程序切分成层

    }  层中采用内聚的设计

    }  层仅依赖于它底下的那层

     

    实体entity:
    有一类对象拥有唯一标识符

    }  能够跨越系统的生命周期甚至能超越软件系统的一系列的延续性和标识符

    }  这样的对象称为实体。

    值对象-value Object

    }  对某个对象是什么不感兴趣,只关心它拥有的属性

    }  用来描述领域的特殊方面、且没有标识符的一个对象,叫做值对象

    }  能被简单的创建和丢弃,生命周期中不会被持久化

    }  值对象可以被共享,值对象应该不可变

    服务-service(比webservice更细粒度服务描述)

    }  领域中的一些动词,代表了领域中的一个重要的行为,却不属于任何对象

    ◦      服务执行的操作涉及一个领域概念,这个领域概念通常不属于一个实体或者值对象

    ◦      被执行的操作涉及到领域中的其他的对象

    ◦      操作是无状态的

    }  服务对象不再拥有内置的状态

    }  服务对象担当重要的协调功能

    }  开发通用语言时,领域中的主要概念被引入到语言中,语言中的名词很容易被映射成对象。

    语言中对应那些名词的动词变成那些对象的行为。但是有些领域中的动作,它们是一些动词,看上去却不属于任何对象。它们代表了领域中的一个重要的行为,所以不能忽略它们或者简单的把它们合并到某个实体或者值对象中。给一个对象增加这样的行为会破坏这个对象,让它看上去拥有了本该属于它的功能。

     

    模块

    }  将相关领域模型提炼分类,分而治之

    }  将高关联度的模型分组到一个模块以提供尽可能大的内聚(以能完整完成任务为准)

    }  分层是水平划分

    }  模块是垂直划分(Domain内部)







    参考架构概述

    }  领域驱动设计(DomainDriven Design)有一个官方的sample工程,名为DDDSample

    }  官网:

    }  该工程给出了一种实践领域驱动设计的参考架构

    架构概述

    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    ------分隔线----------------------------