我是UML的初学者,我有一个PHP应用,其中有一个管理员区域和用户区域。用户可以具有admin
角色,user
角色或两者兼有。在用户界面中,我们可以提交薪水预付款的salary_request
,然后在管理面板中,可以accept
或deny
提交salary_request
,这将仅更改实际[ C0]。
数据库如下:
status
表:ID,电子邮件,密码,名字,姓氏salary_request
表:ID,名称users
:user_id,role_id(roles
和user_role
之间的关系表]]users
:id,金额,日期,request_by,validated_by,状态所以类是:
roles
salary_requests
User
Role
枚举我不知道如何在类图中添加这些关系/规则:
SalaryRequest
可以扮演一个或多个角色Status
是简单用户,则他只能提交User
User
是管理员,他可以接受或拒绝SalaryRequests
User
同时扮演SalaryRequest
和User
的角色,他可以添加admin
并接受或拒绝它们。我能弄清楚的是这个类图还不完整,我不确定到目前为止是否正确:
user
可以将多重性应用于用户和角色之间的关联以进行识别。在UML中,多重性以文本形式写在关联的每一端,可以是绝对值列表,也可以是范围为“ Lower .. Upper”形式,其中“ *”是通配符,表示“ any”。例如:
0 .. *表示零或很多。
1 .. *表示一个或多个。
- 1,2仅表示一个或两个。
- 1表示一个。
因此,用户和角色之间的关联在用户端可能具有多个“ 1”(恰好是一个),在角色端具有多个“ 1 .. *”(一个或多个)。 如果用户是简单用户,则只有在以下情况下,他才能提交SalaryRequests:用户是管理员,如果用户,他可以接受或拒绝SalaryRequest兼有管理员和用户角色,他可以添加SalaryRequests并接受或拒绝它们。
这很难解释如何表达,因为答案取决于您要解释的内容和原因。类图表示代码的
结构的各个方面,而不是其行为,而您想要在此处表达的内容更多的是[[behavioural。
您的图中用户和SalaryRequest之间的关联已经足够广泛,可以覆盖您在上面确定的所有规则,因此,仅从类设计的角度来看,您可以保持原样并解释系统的行为规则。以其他方式(例如,使用用例或活动图进行解释)。
但是,如果您认为规则足够强大,需要在类的structure中进行编码,则必须开始在封装了类的类中派生出不同的子类型或组合。您想要的行为,然后使用它们之间的关联将规则投射到结构中。但是,请注意:我不确定您实际上是要从结构上做到这一点,因为与更改行为相比,更改结构的成本通常更高且影响更深。