Java 具有用户限制的DAO(设计模式)
我想知道是否有办法执行下一步: 我有两种用户(Java 具有用户限制的DAO(设计模式),java,design-patterns,dao,Java,Design Patterns,Dao,我想知道是否有办法执行下一步: 我有两种用户(UserA,UserB)。一个班级学生和一个班级教室 UserB有一个列表 UserA可以将学生保存到任何教室 UserB可以将学生保存到他拥有的教室中 因此,StudentDAO对于每种用户都有不同的方法 我该怎么做?我认为,最好的办法是: 在用户的构造器中,我实例化了一个StudentDAO,它的实现可以感觉到用户。对吗 如果ClassroomDAO有方法getAll()UserA将看到每个教室。但是UserB将看到他拥有的所有教室。但是这个方法
UserA
,UserB
)。一个班级学生
和一个班级教室
UserB
有一个列表代码>
UserA
可以将学生
保存到任何教室
UserB
可以将学生
保存到他拥有的教室
中
因此,StudentDAO
对于每种用户都有不同的方法
我该怎么做?我认为,最好的办法是:
在用户的构造器中,我实例化了一个StudentDAO
,它的实现可以感觉到用户。对吗
如果ClassroomDAO
有方法getAll()代码>UserA
将看到每个教室
。但是UserB
将看到他拥有的所有教室。但是这个方法将与UserB.getclasshers()相同代码>。两种方法也可以这样做
提前感谢。您不应该将数据模型和用户角色混用。甚至判决
UserB有一个列表
应改为
UserB可以访问一个列表
为了避免这种混乱
在您的数据模型中,您应该有一个Student
,而不是StudentforUserA
和StudentForUserB
。很可能您还应该有一个用户
,其角色作为属性。很可能以后您会有更多的用户角色,并且您的类层次结构将无法控制地增长
对于每个对象类型(学生
,教室
),您还应该有一个DAO。DAO通常应该是客户端不知道的。除非您的用户类型以某种方式与您的访问权限控制机制相连接——但是您知道谁登录了,并且您的DAO根据当前用户的权限返回数据或异常
如果您没有足够的访问权限,可以使用引发异常的访问方法
现在取决于UserA和UserB是什么:
用户角色-基于数据库中的某些内容,在设计时未知。然后,DAO在尝试读取不需要的数据时应该抛出一个异常,您应该更高级别地处理该异常,以便礼貌地通知用户他未被授权
不同的演员——你在设计阶段就已经知道了。然后简单地不要调用不需要的方法
那么,你是说这些限制应该写在MVC的视图中?一点也不!这取决于用户A和用户B的确切含义,我将其理解为用户角色,这在设计时是不知道的。在这种情况下,模型应该只返回角色具有访问权限的数据。但是,如果您在设计时知道谁在使用学生实例,只需不调用不需要的方法即可。