Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在UML图中显示不同类型帐户的访问级别_Java_Authorization_Uml_Access Control_Access Levels - Fatal编程技术网

Java 在UML图中显示不同类型帐户的访问级别

Java 在UML图中显示不同类型帐户的访问级别,java,authorization,uml,access-control,access-levels,Java,Authorization,Uml,Access Control,Access Levels,请原谅这个标题,很难正确地解释我需要什么帮助,但我会尝试一下 我正在做一个Java项目,一个订单管理应用程序。我为应用程序中不同类型的功能提供了几个类,例如Order类、Client类、Task类等。每个任务都有与它们所做的事情相关的方法,例如Order类有一个名为newOrder()的方法-你明白了 现在有一个变化,我需要添加一些新的应用程序:应该有三种不同类型的帐户,您可以从中访问应用程序:管理员,项目经理或开发人员。这些帐户中的每一个都有不同类型的应用程序功能访问权限。管理员和项目经理的访

请原谅这个标题,很难正确地解释我需要什么帮助,但我会尝试一下

我正在做一个Java项目,一个订单管理应用程序。我为应用程序中不同类型的功能提供了几个类,例如Order类、Client类、Task类等。每个任务都有与它们所做的事情相关的方法,例如Order类有一个名为
newOrder()
的方法-你明白了

现在有一个变化,我需要添加一些新的应用程序:应该有三种不同类型的帐户,您可以从中访问应用程序:管理员,项目经理或开发人员。这些帐户中的每一个都有不同类型的应用程序功能访问权限。管理员和项目经理的访问级别相似,但开发人员只有在管理员授予他们访问权限的情况下才能访问项目(订单)

我正处于为这个绘制UML图的阶段,我真的很难想象我应该如何可视化这个。我的第一个想法是创建一个用户类和三个子类(Admin、projectmanager和Developer),它们都扩展到用户类。这三个类中的每一个都将包含允许它们执行的操作的方法,例如,Admin和Project Manager类将具有方法
newOrder()
,但Developer类将不具有该方法


我相信你可以告诉我,我在这方面是相当新的,但任何帮助,你可以给我在这一点上是非常感谢的

这是面向对象思想的基础。您已经确定了所需的对象,并已接近确定属性和操作的边缘。您需要从不同的来源获得正确的需求,然后确定开发人员、PM和管理对象(Actor)的可能操作。当然,现在可以将一组常见操作移动到用户(父级)

我觉得,你们的想法正朝着正确的方向发展,只是需要对需求有更清晰的认识,以确定正确的行动集,这些行动将转化为一系列的方法

做UML设计的步骤可以是

  • 识别用例/流程
  • 识别对象(您已经这样做了)
  • 确定每个对象的可能操作
  • 标识对象可能的属性以保存对象的状态
  • 绘制序列图,显示一个系统中对象之间的交互 用例

  • 请注意,从简单和最小的细节开始,然后从那里发展。您已经走上了正确的轨道。

    首先,让我们消除一个模棱两可的问题:OOP语言通常称之为访问级别、访问修饰符、访问说明符的是什么。它在类成员的左侧显示了一个额外的字符:
    +
    表示公共,
    #
    表示受保护,
    -
    表示私有,
    ~
    表示包

    但很快就会发现,您对OOP意义上的访问级别不感兴趣,而是对应用程序和应用程序感兴趣。没有通用的UML解决方案。这完全取决于您的需求和您的设计:

    • 您可能确实对更一般的
      用户有不同的专业化,并在编译时定义什么子类可以执行什么操作。你的方法将是一个良好的开端。不幸的是,同一个用户不能同时拥有多种类型的访问
    • 或者,您可以只有一类
      用户
      ,也可以有一类
      角色
      ,每个
      用户
      可以有一个或多个角色。这种方法使用方便,而且更加灵活
    • 或者,每个业务实体,如
      订单
      可能会受
      访问控制组
      的影响(例如,用户部门?附属代码?或只是访问代码?):
      角色
      将与一个或多个
      访问控制组
      相关
    • 或者,如果您想将例如数据组与操作组结合起来,并更好地控制谁可以使用什么数据做什么,您甚至可能需要更复杂的访问控制组
    正如您所看到的,不同的需求可能需要非常不同的设计

    最后,还有一个问题:将
    newOrder()
    放在哪里:

    • 它是否在
      顺序中
      类本身?然后,该方法可以将
      User
      作为参数,以动态方式检查用户是否被授权
    • 它是否在
      User
      类中?但是具有相同权限的不同类别的用户是否应该实现相同的
      newOrder()
      方法
    • 它是表示业务事务或用例的类吗
    正如你所看到的,有很多解决方案。这不仅仅是需求,还涉及架构选择、关注点的划分和分离。如果你想进一步挖掘的话,所有的书都是关于这些主题的


    结论:UML不会告诉您解决方案应该是什么样子:您需要做出选择,然后您将在UML中显示您已经决定的内容:-)

    为什么您对您已经考虑过的方法不满意?因为老实说,它不适合您。我不知道当开始编码时,它实际是如何工作的。开发人员类将包括哪些方法?因为开发者将不被允许做任何事情,除非他们从管理员那里获得访问权限。