多站点(用户角色)的多种组合的设计模式

时间:2014-07-19 08:39:46

标签: java design-patterns multiset

我在为以下用例决定更好的设计模式时遇到了麻烦。

我们的项目中有两个模块,

Moduel1,Moduel2

对于用户访问每个模块,有两组四个权利:一组用于模块1和模块。 Module2的另一个。

现在,根据用户角色的正确组合,我需要执行特定于每个模块的逻辑。

我有四个模块1的用户角色,

  

Module1UserRole1,Module1UserRole2,Module1UserRole3,Module1UserRole4

不同的组合是15.

对于每个组合,我需要执行相关逻辑。 每个逻辑都彼此完全不同。

我是犹豫不决,是否是一个很好的方法来放置每个组合逻辑 在一个单独的类中,它提供了可读性,而不是用大量的if和else条件填充一个单独的类。

这给了我15个课程。 (每个类代表userrole的一个组合)

这些类中的每一个都将实现以下接口即。 Module1UserRoles。

鉴于上述情况,

  1. 定义Module1UserRoles接口
  2. public interface Module1UserRoles { executeModule1Logic(); }
  3. 假设我有权使用Module1UserRole1&& Module1UserRole2

    然后,上述两个角色的联合逻辑将用 Moudle1UserRole1AndUserRole2Impl 编写。

    public class Moudle1UserRole1AndUserRole2Impl Module1UserRoles {
        public void executeModule1Logic() {
    ///     implement the logic relevant userrole1 and userrole2.
        }
    }
    

    我正在寻找各种选择。任何建议都非常感谢。

2 个答案:

答案 0 :(得分:2)

我建议你使用15个类,因为这些类包含不同的代码,彼此不相关(据我所知)。您将有15个类,实现一个通用接口。公共接口应该定义RoleLogic类应该实现的所有方法。

使用Factory-Pattern确定要使用的正确RoleLogic类。工厂的返回类型将是界面。

在业务逻辑中,您可以将RoleLogic用作常规对象并访问它,或者,如果您已经有一个用于处理角色依赖操作的类,并且您希望保留该类的签名,请使用RoleLogic类als委派。

答案 1 :(得分:0)

我认为这里的关键声明是,“每个逻辑彼此完全不同。”如果这是真的,如果 Moudle1UserRole1AndUserRole2 Module1UserRole1 Module1UserRole2 没有共享逻辑,那么就没有理由“填充一个单一的类有大量的if和else条件。“在这种情况下,你谈的是一个简单的Strategy Pattern,有15种可能的算法。