关于项目管理中关系类型的 UML class 图
UML class diagram about relationship types in project management
我正在尝试为我的项目管理软件绘制 class 图表
描述如下。它包含以下 classes:
Project
- 软件项目
ProjectManager
- he/she 管理项目的人
Employee
- 从事项目工作的人
和以下 relationships/associations:
一个项目经理可能要管理多个项目,而一个项目只能由一个项目经理管理
项目经理可以将员工分配给 he/she 管理
的项目
对于上述关联,我创建了这个 class 图:
- 很清楚如何为第一个关联建模(在
ProjectManager
和 Project
之间)
- 我不知道如何为第二个关联建模
(如何实现项目经理只能将项目分配给他负责管理的员工?)
一种更通用的问题建模方法是为项目经理和员工使用对象类型 Person
(或 Employee
)。这表示项目经理也是员工,可以作为经理分配到一些项目,而作为普通员工分配到其他项目。
在这种方法中,您将拥有两个 classes Employee
和 Project
,它们之间有两个关联:
- 一个协会
Employee
-works-for-Project
(或者最好在协会末端使用像worker
这样的角色名称)。
- 关联
Employee
-is-manager-of-Project
,其中 manager
是角色名称。
如果你真的需要model/record项目经理分配员工到项目,那么你需要替换第一个关联(Employee
-works-for-Project
)具有三元关联 Employee
-is-assigned-to-Project
-by-Employee
-as-assigner
其中后者雇员(分配者)必须是指定项目的经理。可以使用附加到 Employee
class.
的相应 不变量 来捕获此条件
您的问题与我们在我公司 BITPlan 的 UML 培训中使用了多年的上述示例很接近。
在此示例中,有一个 ProjectAssignment class,并且规则是对于每个时间点,可能只有一个带有 "responsible=true" 的 ProjectAssignment。具有此 ProjectAssignment 的 Employee 是 ProjectManager。当子项目开始发挥作用并且您希望对可能随时间变化的整个管理器层次结构建模时,也可以应用此样式。
就我个人而言,我认为在模型文档中以散文形式陈述此类限制通常比尝试使用继承和基数在结构中显示它要好得多。
您只需向 Project
添加一个名为 assignEmployee
的操作,该操作会将员工添加到其分配的员工列表中:
不清楚如何分配员工,是只分配给一个项目还是多个项目。此外,您可能需要取消分配操作。
当然,您也可以使用关联 class,就像@WolfgangFahl 所建议的那样。
我正在尝试为我的项目管理软件绘制 class 图表 描述如下。它包含以下 classes:
Project
- 软件项目ProjectManager
- he/she 管理项目的人Employee
- 从事项目工作的人
和以下 relationships/associations:
一个项目经理可能要管理多个项目,而一个项目只能由一个项目经理管理
项目经理可以将员工分配给 he/she 管理
的项目
对于上述关联,我创建了这个 class 图:
- 很清楚如何为第一个关联建模(在
ProjectManager
和Project
之间) - 我不知道如何为第二个关联建模
(如何实现项目经理只能将项目分配给他负责管理的员工?)
一种更通用的问题建模方法是为项目经理和员工使用对象类型 Person
(或 Employee
)。这表示项目经理也是员工,可以作为经理分配到一些项目,而作为普通员工分配到其他项目。
在这种方法中,您将拥有两个 classes Employee
和 Project
,它们之间有两个关联:
- 一个协会
Employee
-works-for-Project
(或者最好在协会末端使用像worker
这样的角色名称)。 - 关联
Employee
-is-manager-of-Project
,其中manager
是角色名称。
如果你真的需要model/record项目经理分配员工到项目,那么你需要替换第一个关联(Employee
-works-for-Project
)具有三元关联 Employee
-is-assigned-to-Project
-by-Employee
-as-assigner
其中后者雇员(分配者)必须是指定项目的经理。可以使用附加到 Employee
class.
您的问题与我们在我公司 BITPlan 的 UML 培训中使用了多年的上述示例很接近。
在此示例中,有一个 ProjectAssignment class,并且规则是对于每个时间点,可能只有一个带有 "responsible=true" 的 ProjectAssignment。具有此 ProjectAssignment 的 Employee 是 ProjectManager。当子项目开始发挥作用并且您希望对可能随时间变化的整个管理器层次结构建模时,也可以应用此样式。
就我个人而言,我认为在模型文档中以散文形式陈述此类限制通常比尝试使用继承和基数在结构中显示它要好得多。
您只需向 Project
添加一个名为 assignEmployee
的操作,该操作会将员工添加到其分配的员工列表中:
不清楚如何分配员工,是只分配给一个项目还是多个项目。此外,您可能需要取消分配操作。
当然,您也可以使用关联 class,就像@WolfgangFahl 所建议的那样。