我试图弄清楚如何使用以下属性对情况进行建模:
- 在域中存在一组实体类型 Ei...Ej 以及这些实体类型 Ri...Rj 之间的一组关系类型;
- 可以区分同时对系统的不同部分具有重要意义的那些实体和关系类型的至少两个不同版本。
在最简单的情况下,这些不同的版本可能是“实时数据”版本和“最后批准的快照”版本。在这种情况下,对系统的不同部分具有重要意义可能会转化为以下内容:
- 特权较少的参与者和用例只能与“最后批准的快照”版本一起使用;
- 同时有更多的特权参与者具有相同或不同的用例集,可以使用“实时数据”版本;
- 有实体类型 Ex...Ey 与来自“最后批准的快照”版本的实体 ei...ej 形成关系,或者其约束引用来自“最后批准的快照”版本的实体 ei...ej 的属性值;
- 同时存在不同的实体类型 Ea...Eb,它们要么与来自“实时数据”版本的实体 ei...ej 形成关系,要么其约束引用来自“实时数据”的实体 ei...ej 的属性值数据”版本。
如果我想在同一张图上显示上述示例中的所有实体类型 Ei...Ej、Ex...Ey 和 Ea...Eb 以及它们之间的约束和关系,我该怎么做?
我正在考虑为同一实体类型使用两个不同的类:一个类代表该实体类型的“最后批准的快照”版本,另一个类代表该类型的“实时数据”版本。
但我不太喜欢这种方法
- 这似乎是多余的;
- 我实际上不确定代表同一实体类型的两个不同版本的两个类之间存在什么样的关系以及如何在图表中表示这种关系(也许标准配置文件中的“派生”刻板印象在这里是合适的,但我没有把握)。
编辑
不幸的是,我不能使用我工作中的例子,所以我想出了这个完全虚构的例子,但它也部分模仿了我最近试图解决的问题。我将使用流行的“WorksInUsing”协会表示敬意。这将使问题更加具体。
另外,需要明确的是,我正在尝试创建概念模型,而不是创建 OOP/关系设计/实现模型。
让我们假设一个实体类型 Employee。
让我们假设一个名为“SkillAdministrator”的参与者管理以下实体和关系类型:
- 实体类型技能
- 实体类型部门
- 实体类型 Employee 和 Skill 之间的关系类型 KnownSkill
- 实体类型 Employee 和 Department 之间的关系类型 WorkInDepatment
让我们假设,所有上述实体和关系类型的更改很少发生,但是当它们发生时,它们会以非常大的批量发生,并且我们的技能管理员需要相当长的时间来处理每个此类更改。
完成更改处理后,他运行 PublishChange 用例,该用例创建实体和关系类型 Skill 和 KnownSkill 的快照,并使该快照可供系统的其他用户使用。
现在让我们假设一个名为 Manager 的参与者管理以下实体和关系类型:
- 实体类型项目
- 实体类型 Employee、Skill 和 Project 之间的关系类型 WorksInUsing。
只有在上次运行 PublishChange 用例时存在的技能才能在 WorksInUsing 关联中发挥作用。同样,KnownSkill 对是三元组 WorksInUsing 的先决条件,但同样只有那些 KnownSkill 对,它们在 PublishChange 用例的最后一次运行中存在。
在 Manager 管理 WorksInUsing 关联的同时,SkillAdministrator 可以开始处理他所管理的实体和关系类型的下一个重大变化。Manager 不会看到这些更改,直到 PublishChange 用例再次运行。
(根据域,有多种不同的方法来处理系统管理员删除特定技能或已知技能关联,然后应用这些更改 - 在最简单的情况下,两种类型都可以假定为永久,因此可以添加新实例,但无法删除现有实例,例如法律以这种方式工作)