具有用户限制的DAO(设计模式)

时间:2014-04-08 04:25:41

标签: java design-patterns dao

我想知道是否有办法执行下一步:

我有两种用户(UserAUserB)。课程Student和课程Classroom

UserBList<Classroom> Classrooms;

UserA可以将Student保存到任何Classroom

UserB可以将Student保存到他自己的Classroom中。

因此,StudentDAO为每种用户提供了不同的方法。

我该怎么做?我认为,最好的方法是:

在用户的构造函数中,我实例化一个StudentDAO,其实现可以满足用户的需求。这是对的吗?

如果ClassroomDAO的方法为getAll();,该怎么办? UserA会看到每个Classroom。但UserB会看到他所拥有的所有Classroom。但是这种方法与UserB.getClassrooms();相同。 2种方法也会这样做。

提前致谢。

1 个答案:

答案 0 :(得分:2)

您不应混淆数据模型和用户角色。甚至句子

  

UserB 列表课堂

应重新表述为

  

UserB 可以访问列表教室

避免这种混淆。

在您的数据模型中,您应该一个 Student,而不是StudentforUserAStudentForUserB。而且很可能你也应该一个 User,其角色作为属性。很可能您将拥有更多的用户角色,而您的班级层次结构将无法控制地成长。

对于每种对象类型(StudentClassroom),您还应该有一个 DAO。 DAO通常应该是客户端不知道的。除非您的用户类型以某种方式与您的访问权限控制机制相关联 - 但您知道谁登录并且您的DAO根据当前用户的权限返回数据或例外。

如果您没有足够的访问权限,那么拥有可以抛出异常的访问方法是完全可以的。

现在取决于UserA和UserB是什么:

  1. 用户角色 - 基于数据库中的某些内容,在设计时未知。然后DAO应该在尝试读取不需要的数据时抛出异常,你应该处理更高的异常,以便礼貌地告知用户他没有被授权。

  2. 不同的演员 - 你在设计时已经知道的事情。然后根本不要调用不需要的方法。