领域驱动设计-2-通用语言和领域模型管理

通用语言

通用语言是软件生命周期中沟通的公共语言,用于保障软件沟通环节的畅通.     
通用语言的形成来源包括:

    领域模型    
    人的沟通    
    文档和图    
    源代码    
    解释性模型

领域模型管理

1 模型驱动设计    

模型驱动设计是通过结合前期的需求分析模型和开发设计,形成领域模型,获取一个全局设计概览的设计方式.    
  领域模型是现实问题范围的抽象体现.如地球仪和地球的关系.    

需求分析模型是瀑布开发模式中前期进行需求分析,得到的软件模型,它的问题是只从需求角度反映了软件模型,
  很多设计没有考虑开发实现的难度和可能性,后期会造成很多返工.

开发设计是敏捷开发模式中倡导的:软件即代码,充分考虑开发中对于现实问题的实现,它的缺点缺少全局视野.    

模型驱动设计通过结合需求分析模型和开发设计,保障了设计的全局性,便于软件的实现.这相当于结合了和
  敏捷开发模式的建模优点,剔除了不足.



模型驱动设计

2 领域模型的获取:    

  •  分离领域    

  常用的分层架构,后端的像应用层,业务层(领域层),持久层;前端的像mvc等,通过分层来进行数据解耦,

  进行模型的抽取.这里领域模型的应用不适合重前端的应用(前端不进行模型抽取),因为没有进行模型

  抽取,无法做到将业务复杂度和技术复杂度进行分离,并且也无法进行重用.同时领域模型适用于大型

  项目,因为大型项目才涉及较多的重用,开发时间也较富余,前期大量的规划工作才有价值.

  • 模型的实现

    通过实体进行基础模型定义.

  实体(ENTITY):具备唯一标识的对象,数据具有内在连续性.例如:学籍管理系统中,学生就是值对象,
   每个学生都有唯一的标识,用于识别并贯穿所有在校期间.

    通过值对象进行数据传递.

  值对象(VALUE OBJECT):值+对象=将值用对象的方式进行表述,来表达一个具体的固定不变的概念.
   例如:Java的枚举就是值对象.不需要唯一标识,不可变.它便于重用,简化了数据操作.

    通过服务实现模型操作.

  服务(SERVICE):将无法归结到实体和值对象的过程或转换封装所成的接口.例如:银行账户导出功能.
   它是对于账户实体的操作,但是你将它归属到账户实体会打破实体的封装,
   并且不便于领域层的访问,这样就可以将它单独定义为服务接口.

    通过模块进行模型分类.
        模块(MODULES):它将关联实体,值对象和服务等模型元素聚合到一起,以降低建模和设计的复杂性.

原文地址:https://www.cnblogs.com/chengmuyu/p/10933945.html