2014-04-08 60 views
1

我想知道是否存在執行下一的一種方法:DAO(Dessign圖案)與用戶限制

我有2個種類的用戶(UserAUserB)。類別Student和類別Classroom

UserB有一個List<Classroom> Classrooms;

UserA可以將Student保存到任何Classroom中。

UserB可以將Student保存爲他所擁有的Classroom。因此,StudentDAO對每種用戶都有不同的方法。

我該怎麼做?我認爲,最好的方法是:

在用戶的構造函數中,我實例化了一個StudentDAO,其中包含支持用戶的實現。那是對的嗎?

如果ClassroomDAO的方法getAll();該怎麼辦? UserA將會看到每個Classroom。但是UserB將會看到他所有的Classroom。但是這種方法將與UserB.getClassrooms();相同。 2種方法也會這樣做。

在此先感謝。

回答

2

您不應該混用數據模型和用戶角色。連句

用戶B 列表教室

應該被改寫爲

用戶B 可以訪問列表教室

避免這種混亂。

在你的數據模型,你應該有一個Student,不StudentforUserAStudentForUserB。很可能你也應該有單一的User與它的角色作爲屬性。你很可能會有更多的用戶角色,而你的類層次結構會不受控制地成長。

您還應該有單個每個對象類型的DAO(Student,Classroom)。 DAO通常應該是客戶端不知情的。除非您的用戶類型以某種方式與您的訪問權限控制機制相關 - 但是您知道誰登錄了,並且您的DAO根據當前用戶權限返回數據或異常。

如果訪問方法沒有足夠的訪問權限,那麼存在引發異常的訪問方法是完全可以的。

現在要看是什麼UserA和用戶B是:

  1. 用戶角色 - 基於從數據庫中,在設計時不知道的東西。然後,在嘗試讀取不需要的數據時,DAO應該拋出異常,並且應該處理更高的異常,以便有禮貌地通知用戶他未被授權。

  2. 不同的演員 - 你在設計時已經知道的東西。然後簡單地不要調用不需要的方法。

+0

所以,你告訴我,限制應該寫在MVC的視圖? – Quarktum

+0

根本不是!這取決於UserA和UserB的確切含義,我隱含地將它理解爲用戶角色,在設計時你不知道。在這種情況下,MODEL應只返回角色有權訪問的數據。 –

+0

但是,如果您在設計時間知道誰在使用Student實例,只需不要調用不需要的方法即可。 –