• 【转载】四色原型


    四色原型

    在企业应用的上下文中,四色原型是领域模型的一种原型,原型的意思是指领域中的任何模型及其关系都可以抽象为“四色原型”。

    四色原型可以用这句话进行描述:某个人(Party)的角色(PartyRole)在某个地点(Place)的角色(PlaceRole)用某个东西(Thing)的角色(ThingRole)做了某件事情(MomentInterval)。

    图片示意

    名词解释

    • PartPlaceThing:简称PPT,用淡绿色表示,常见的PPT有:部门、岗位、人员、地点、物品等。
    • Description:简称Des,用淡蓝色表示,主要用来对PPT进行描述,常见的Des有:部门类型、岗位层级、人员类型、地点区域、物品分类等。
    • Role:用淡黄色表示,主要表示PPT在某个场景下扮演的角色,常见的角色有:财务类部门、管理类岗位、请假者、销售点、产品等。
    • MomentInterval:简称MI,用淡红色表示,主要表示在一刻或一段时间内发生的一件事情,常见的MI有:部门移动、岗位移动、员工离职、产品销售等。
    • MomentInteval:简称MIDetail,用淡红色表示,主要表示MI的明细,常见的MIDetail有销售明细、入库明细、出库明细等。

    出差管理示例

    根据四色原型进行聚合设计(四步曲)

    第一步:识别模型

    根据四色原型很容易识别出领域模型(见上图)。

    第二步:识别关联

    根据四色原型同样很容易识别出领域模型之间的关系(见上图)。

    第三步:划分聚合

    • MI和MIDetail是一个聚合,MI是聚合根。
    • PPT是一个聚合,PPT是一个聚合根。如果Des只“描述”PPT,那么这个Des会作为一个值对象隶属于属于PPT所在的聚合。
    • Des是一个聚合,Des是一个聚合根。前提你想“跟踪”Des关联的PPT。
    • Role不属于聚合,Role是一个带状态的领域服务,Role采用装饰器模式装饰PPT。

    划分结果

    第四步:精简关联

    • 去掉MI和Role之间的关联,改为仓储查询,根据需要让MI关联一个Role的快照(发生时刻Role的状态)。将关联改为仓储查询的理由是这样更加灵活,一个请假人有1W个请假单,没有必要设置这样的关联。让MI关联一个Role的快照的理由是MI很多情况要记录下发生时刻Role的状态,如:出差单要记录下发生时刻请假人的组织信息,而不是现在的组织信息。
    • PPT和DES之间的关联可以根据自己的爱好酌情保留,我喜欢用仓储查询,这样更灵活。
    • 去掉PPT和Role之间的关联,改为仓储查询。比如:用仓储查出PPT,然后将这个PPT实例注入到Role中。

    精简结果

    为什么销售单和销售单明细是一个聚合,而文章和评论不是一个聚合呢?

    因为销售单是MI,销售单明细是MIDetail,因此他们是一个聚合;而文章是MI,评论也是MI,所以他们不是一个聚合。

    原文地址: https://www.cnblogs.com/happyframework/archive/2013/04/26/3043515.html

  • 相关阅读:
    springboot笔记
    SpringBoot
    SpringBoot整合JPA
    Docker
    SpringMVC学习04:异常处理和拦截器
    SpringMVC学习03:文件上传
    SpringMVC学习02:响应数据和结果视图
    Mybatis学习04
    【java基础】初步理解面向对象、类、对象
    【Java基础】方法的重载
  • 原文地址:https://www.cnblogs.com/lianjinzhe/p/10322913.html
Copyright © 2020-2023  润新知