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的确切含义,我将其理解为用户角色,这在设计时是不知道的。在这种情况下,模型应该只返回角色具有访问权限的数据。但是,如果您在设计时知道谁在使用学生实例,只需不调用不需要的方法即可。