我在为以下用例决定更好的设计模式时遇到了麻烦。
我们的项目中有两个模块,
Moduel1,Moduel2
对于用户访问每个模块,有两组四个权利:一组用于模块1和模块。 Module2的另一个。
现在,根据用户角色的正确组合,我需要执行特定于每个模块的逻辑。
我有四个模块1的用户角色,
Module1UserRole1,Module1UserRole2,Module1UserRole3,Module1UserRole4
不同的组合是15.
对于每个组合,我需要执行相关逻辑。 每个逻辑都彼此完全不同。
我是犹豫不决,是否是一个很好的方法来放置每个组合逻辑 在一个单独的类中,它提供了可读性,而不是用大量的if和else条件填充一个单独的类。
这给了我15个课程。 (每个类代表userrole的一个组合)
这些类中的每一个都将实现以下接口即。 Module1UserRoles。
鉴于上述情况,
public interface Module1UserRoles { executeModule1Logic(); }
假设我有权使用Module1UserRole1&& Module1UserRole2
然后,上述两个角色的联合逻辑将用 Moudle1UserRole1AndUserRole2Impl 编写。
public class Moudle1UserRole1AndUserRole2Impl Module1UserRoles {
public void executeModule1Logic() {
/// implement the logic relevant userrole1 and userrole2.
}
}
我正在寻找各种选择。任何建议都非常感谢。
答案 0 :(得分:2)
我建议你使用15个类,因为这些类包含不同的代码,彼此不相关(据我所知)。您将有15个类,实现一个通用接口。公共接口应该定义RoleLogic类应该实现的所有方法。
使用Factory-Pattern确定要使用的正确RoleLogic类。工厂的返回类型将是界面。
在业务逻辑中,您可以将RoleLogic用作常规对象并访问它,或者,如果您已经有一个用于处理角色依赖操作的类,并且您希望保留该类的签名,请使用RoleLogic类als委派。
答案 1 :(得分:0)
我认为这里的关键声明是,“每个逻辑彼此完全不同。”如果这是真的,如果 Moudle1UserRole1AndUserRole2 与 Module1UserRole1 或 Module1UserRole2 没有共享逻辑,那么就没有理由“填充一个单一的类有大量的if和else条件。“在这种情况下,你谈的是一个简单的Strategy Pattern,有15种可能的算法。