[英]Am I in tier leakage anti pattern? What should I do?
我被要求向現有系統添加模塊。 在研究結構時,我發現了一些“怪異”的東西。 該系統基於struts1。
在一些jsp中,我發現有一些DAO調用來返回實體對象。 在大多數JSP頁面中,都有一個<app:validate>
標記,該標記將調用DAO來檢查訪問權限,並且如果不允許,將重定向到登錄頁面。 有一個accessDA對象,但是它不僅可以進行數據獲取,而且還可以進行一些訪問權限檢查。
我的問題是:
在典型的MVC用法中,應該有明確的關注點分離 。 含義,模型,視圖和控制器部分應解耦。 我來回答你的問題
1.喊出DAO是否會導致層泄漏
是。 理想情況下,DAO調用應該在操作/處理程序類中進行。 這樣獲得的數據被放入請求/會話中,以便稍后由視圖呈現層獲取。
2,應用標簽的實現,這是一個好習慣嗎?(還是應該在動作上進行檢查而不是查看)
每次訪問權限檢查都不應有DAO調用。 訪問權限應作為用戶登錄名進行緩存,並應使用上述標記在后續請求中進行檢查。 所以在這里,雖然不是直接違規,但不是一個好習慣。
3.accessDA太胖了嗎?
是。 看起來是這樣。
4.我的新模塊應該遵循現有結構嗎?
作出上述觀察后,我建議不要這樣做。
1)海事組織(IMO)是的,但是: 並不是這樣的泄漏抽象,正是因為它在標簽中。 存在標記以從視圖中抽象實現細節。 也有爭議的是,在操作中進行訪問查找會使操作對僅與視圖層相關的內容負責。
將數據訪問封裝在標簽本身中的另一個問題是,如果頁面上使用標簽的次數很多,則可能需要的數據訪問量過多,從而降低了響應時間。 聰明的標簽可以通過緩存值來減輕這種情況,或者可以在更深層次上實現緩存。
2)像這樣的標記應該對當前用戶對象起作用,該對象應該已經封裝了用戶的權限(可能在登錄時)。 也就是說,如果高速緩存的值可以在用戶會話期間更改,則使用高速緩存的值來確定訪問權限可能還不夠。
3)我不知道; 在不知道更多細節的情況下,IMO無法回答。
4)取決於。 多種方式做同一件事可能導致維護方面的噩夢。
如果要根據最佳實踐重新構建應用程序,那么可以,新開發應遵循更好的模式。 如果沒有的話,IMO會引入多種做同一件事的方式,這會使人更加困惑,並且使追隨者變得更加困難,因為他們隨后需要決定做某事的方式,確定不同事物之間是否存在功能上的差異方式等等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.