如何解决在UML图中显示不同类型帐户的访问级别
请原谅标题,正确解释我需要帮助的地方有些困难,但是我会努力的。
我正在研究Java项目,一个订单管理应用程序。对于应用程序中的不同类型的功能,我有几个类,例如这些任务中的每一个都具有与其所从事的工作有关的方法,例如,订单类,客户类,任务类等。 Order类有一个名为newOrder()
的方法-您明白了。
现在发生了变化,我需要向应用程序中添加一些新内容:应该可以使用三种不同类型的帐户来访问该应用程序:Admin,Project Manager或Developer。这些帐户中的每一个将具有对应用程序功能的不同类型的访问。管理员和项目经理的访问权限级别相似,但是开发人员只能访问管理员授予他们访问权限的项目(订单)。
我正处于为此绘制UML图表的阶段,并且我真的在如何可视化此问题上苦苦挣扎。我的第一个想法是创建一个User类和三个子类(Admin,Project Manager和Developer),它们都扩展到User类。这三个类别的每一个都将包含允许其执行操作的方法,例如Admin和Project Manager类将具有方法newOrder()
,但Developer类将没有方法。
我敢肯定,您可以说我是新手,但是在此刻您能给我的任何帮助都将受到赞赏!
解决方法
首先,让我们摆脱歧义:OOP语言通常将访问级别,访问修饰符,访问说明符称为visibility in UML。在类成员的左侧显示了一个额外的字符:+
代表公共,#
代表受保护,-
代表私有,~
代表包。
但是很快就会发现,您对OOP的访问级别不感兴趣,而是对应用程序中的authorisations和access control感兴趣。并且没有通用的UML解决方案。这完全取决于您的要求和您的设计:
- 您可能确实具有更一般的
User
的不同专长,并在编译时定义了哪些子类可以执行哪些操作。您的方法将是一个好的开始。不幸的是,同一用户将无法同时进行多种访问。 - 或者,您只能有一个
User
类,但也可以有一个Role
类,每个User
可以有一个或多个Role。这使用composition over inheritance,并且更加灵活。 - 或者,每个业务实体(例如
Order
都可能会受到AccessControlGroup
的影响(例如,用户部门?子公司代码?还是仅仅是访问代码?):Role
将是与一个或多个AccessControlGroup
相关。 - 或者,如果您想将例如数据组与操作组结合在一起,从而更好地控制谁可以对哪些数据进行处理,甚至可能需要更复杂的访问控制组。
如您所见,不同的需求可能需要完全不同的设计。
最后,有一个问题:newOrder()
放在哪里:
- 它是否在
Order
类中?然后,该方法可以使用User
作为参数,以动态方式检查用户是否被授权。 - 它在
User
类中吗?但是,具有相同权限的不同类别的用户是否应该实施相同的newOrder()
方法? - 是代表业务交易还是用例的类吗?
- ...
如您所见,有很多解决方案。这不仅是要求,还涉及架构选择,class responsibilities和关注点分离。如果您想进一步挖掘,就这些主题写了整本书。
结论: UML不会告诉您解决方案的外观:您需要做出选择,然后您将在UML中显示您已经做出的决定:-)
,这是OOP思维的基础。您已经确定了必需的对象,并且已经确定了属性和操作。您需要从不同来源正确获取需求,然后为开发人员,PM和管理员对象(演员)确定可能的操作。现在,当然,可以将一组常见操作移至“用户(父母)”。
我认为,您的想法是朝着正确的方向前进,只需要更清楚地确定要求的正确动作集即可,这将变成一系列方法。
进行UML设计的步骤可能是...
- 确定用例/流程
- 识别对象(您已经做到了)
- 识别每个对象可能采取的行动
- 识别对象的可能属性以保留对象的状态
- 提出序列图,该序列图显示了对象中对象之间的交互 用例
注意,从简单和最少的细节开始,然后从那里发展。您已经走上正轨。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。