我想知道是否有办法执行下一步:
我有两种用户(UserA
,UserB
)。课程Student
和课程Classroom
。
UserB
有List<Classroom> Classrooms;
。
UserA
可以将Student
保存到任何Classroom
。
UserB
可以将Student
保存到他自己的Classroom
中。
因此,StudentDAO
为每种用户提供了不同的方法。
我该怎么做?我认为,最好的方法是:
在用户的构造函数中,我实例化一个StudentDAO
,其实现可以满足用户的需求。这是对的吗?
如果ClassroomDAO
的方法为getAll();
,该怎么办? UserA
会看到每个Classroom
。但UserB
会看到他所拥有的所有Classroom
。但是这种方法与UserB.getClassrooms();
相同。 2种方法也会这样做。
提前致谢。
答案 0 :(得分:2)
您不应混淆数据模型和用户角色。甚至句子
UserB 列表课堂
应重新表述为
UserB 可以访问列表教室
避免这种混淆。
在您的数据模型中,您应该一个 Student
,而不是StudentforUserA
和StudentForUserB
。而且很可能你也应该一个 User
,其角色作为属性。很可能您将拥有更多的用户角色,而您的班级层次结构将无法控制地成长。
对于每种对象类型(Student
,Classroom
),您还应该有一个 DAO。 DAO通常应该是客户端不知道的。除非您的用户类型以某种方式与您的访问权限控制机制相关联 - 但您知道谁登录并且您的DAO根据当前用户的权限返回数据或例外。
如果您没有足够的访问权限,那么拥有可以抛出异常的访问方法是完全可以的。
现在取决于UserA和UserB是什么:
用户角色 - 基于数据库中的某些内容,在设计时未知。然后DAO应该在尝试读取不需要的数据时抛出异常,你应该处理更高的异常,以便礼貌地告知用户他没有被授权。
不同的演员 - 你在设计时已经知道的事情。然后根本不要调用不需要的方法。