我在为以下用例决定更好的设计模式时遇到了麻烦。
我们的项目中有两个模块,
模块1,模块2
对于访问每个模块的用户,有两组四项权利:一组用于模块 1,另一组用于模块 2。
现在,根据用户角色的正确组合,我需要执行特定于每个模块的逻辑。
对于模块 1,我有四个用户角色,
Module1UserRole1, Module1UserRole2, Module1UserRole3, Module1UserRole4
不同的组合为 15。
对于每个组合,我都需要执行相关逻辑。 每一种逻辑都完全不同。
我犹豫不决是否是一个好的方法来放置每个组合逻辑 在一个单独的类中,它提供了可读性,而不是用大量的 if 和 else 条件塞满一个类。
这给了我总共 15 个类。 (每个类代表用户角色的一种组合)
每个类都将实现以下接口(interface):模块1用户角色。
鉴于上述情况,
- 定义 Module1UserRoles 接口(interface)
公共(public)接口(interface) Module1UserRoles {executeModule1Logic(); }
假设我有权使用 Module1UserRole1 && Module1UserRole2
然后将上述两个角色并集的逻辑写在 Moudle1UserRole1AndUserRole2Impl 中。
public class Moudle1UserRole1AndUserRole2Impl Module1UserRoles {
public void executeModule1Logic() {
/// implement the logic relevant userrole1 and userrole2.
}
}
我正在考虑各种选择。非常感谢任何建议。
最佳答案
我建议您使用 15 个类,因为这些类包含不同的代码,彼此不相关(据我所知)。您将有 15 个类,实现一个公共(public)接口(interface)。公共(public)接口(interface)应定义 RoleLogic 类应实现的所有方法。
使用工厂模式来确定要使用的正确 RoleLogic 类。工厂的返回类型将是接口(interface)。
在您的业务逻辑中,您可以使用 RoleLogic 作为常规对象并访问它,或者,如果您已经有一个用于处理角色相关操作的类并且您想要保留该类的签名,请使用 RoleLogic 类代表。
关于java - 多重集的多种组合的设计模式(用户角色),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24838447/