领域建模简介
领域模型(domain model)是对领域内的概念类或现实世界中的可视化表示。领域模型也叫做概念模型、领域对象模型和分析对象模型。领域模型和类都是对现实中的实体的描述,但是它们之间是有区别的,领域模型是对现实世界概念类的表示,不是软件对象的表示。它不用来描述软件类、架构或者软件对象。
结合工程实践建模
我的工程实践是做一款类似于facerig的软件,可以通过摄像头等设备实施捕捉到用户的面部,输入为视频流,并且实时映射到卡通模型上,并且将模型覆盖到人脸,达到换脸的效果。
1、Collect application domain information
首先收集系统主要业务的功能性需求与非功能性需求,用户需求。
功能性需求
(1)设计并训练好的模型,可以对输入的视频流处理实时捕捉人脸特征点;
(2)将特征点映射到模型上,使其与人脸变化同步,并且覆盖到视频流中的人脸;
(3)收集和响应用户的数据和行为。
2、Brainstorming
(1)列出重要的应用程序域概念
(2)列出它们的属性
(3)列出它们之间的关系
3、Classifying the domain concepts
(1)类
(2)属性/属性值
(3)关系:association, inheritance, aggregation
4、Document result using UML class diagram
使用DDD方法
DDD本身是一套完整、详尽的方法论,从如何需求沟通(构建领域知识),到高层设计(战略建模)、详细设计(战术建模)
- 创建实体
- 基于通用语言和领域知识,需要首先分辨出实体。
- 实体是领域中需要唯一标识的领域概念。如果两个实体所有状态都一样,但标识不一样,就是两个不同的实体。
- 实体同样需要属性来描述
- 创建值对象
- 值对象是领域中不需要唯一标识的领域概念。
- 如果两份对象所有状态都一样,我们就认为是同一个值对象。值对象也可以理解为一组聚合的属性。例如地址信息,类目信息。
- 创建聚合根
- 聚合根是一个实体,将一组模型聚合在一起,与外部模型划分开来。这一组模型全部关联着聚合根,只有聚合根负责与外部访问。
- 聚合根有助于保持领域模型关联的简化和生命周期的维护。
结合我自己的工程实践,分为如下几个类:用户类,用户操作类,模型操作类,模型管理类,视频流类与视屏流信息处理类