java - 添加多种用户类型,每个用户都有不同的功能

标签 java oop design-patterns cocoa-design-patterns

我有一个应用程序,其中有 45 种不同的用户,每个用户都有一组可用的功能。我们使用枚举来识别每组用户,并且每个功能都在客户端进行硬编码,这使得更改非常困难。

e.g : 

USER_KABO,
USER HAEB,
USER_IOQW ... 

//Method getFunctionality is hardcoded for every user.
-(ArrayList)getFunctionality:(UserType)type{

   switch(type):
      case : USER_KABO:
          al  =   new ArrayList();
          al.add(new Functionality());


      case : USER HAEB;
....


}

我遍历这个数组来检查用户是否具有功能。根据登录状态,我在代码中设置用户类型。

我正在寻找一种更灵活的方法,可以轻松地向任何用户添加功能,并允许在不修改太多代码的情况下添加任何用户。

最佳答案

从架构的角度来看,您的问题类似于Best Design for a User/Role Management System? 。接受的答案建议使用 role-based access control (RBAC)模式,这对您的情况也有意义。

基本上,每个用户都知道一个或多个角色(您所说的用户类型)。每个角色都知道它可以执行的一个或多个操作(您所说的功能)。

如果您想添加新功能,则必须创建一个从Operation派生的新类,其中包含新的源代码,并将所有适当的角色链接到它。如果您想添加新用户或新角色,则不必创建新的源代码,因此您无需创建新类,而只需从类 SubjectRole 中创建一个新对象,并将其适当链接。

为了维护您的应用,您可以轻松地将代码中的用户角色创建提取到应用外部的配置中,这样您就不必修改任何代码来更改它们。这很有效,因为您不必创建或修改类。但由于需要更改操作,因此从应用程序外部配置这些操作会更加困难,而且很可能最好的方法就是创建新类;但当然这也是可能的,例如具有插件机制。

关于java - 添加多种用户类型,每个用户都有不同的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23552849/

相关文章:

java - 从单独类中的监听器禁用 JButton

java - 使用队列的超市模拟器

asp.net - 存储库模式和 Linq to sql

java - Google App Engine Java 上的 UncaughtExceptionHandler

java - Spock测试中是否可以有一个全局设置方法?

java - JFreeChart 实现错误

c# - 抽象类不能在c#中密封?

java - 如何在服务类和 util 类之间拆分应用程序功能?

javascript - 分配给导出与分配给模块有什么区别?

java - 单例方法是否适合访问/维护数据库和互联网连接