2011-02-04 30 views
3

我是一名前端開發人員,我發現自己處於jsp視圖層,並且看到了很多將數據(模型)推入視圖的解決方案。最近我遇到了一個taglib解決方案,它將數據導入jsp,這對我來說似乎更加自然和明智。MVC與Taglibs,意見/選擇?

首先問題

鑑於單頁,並把它看作一個單獨的實體,MVC使得絕對意義,但是單個頁面可能相當複雜,最有可能重用那些對其他使用的組件/服務頁面。因此,控制器也變得相當複雜。

根據我的經驗,頁面也是可變的,因爲客戶喜歡在下一次「重新設計」時轉移功能或將整個站點翻出來。這通常導致一個相當繁瑣的重構項目,字面上每件事都需要重寫。

然後出現一致性問題,在一個頁面上,數據集被放入ModelView中作爲「列表」,在另一個「list」可能要抽象的頁面上,它被放入ModelView中作爲「specificList」。在項目生命週期中保持一致性是一項單調乏味的任務,通常會被避免,但這正是純粹的MVC解決方案所發生的情況。

解決方案?

因此,在我繼承的最近一個項目中,我看到了兩種將數據拉入pageView的解決方案。第一個使用jsp:include來調用一個jsp頁面並且關閉另一個控制器是相當難看的。

第二次我發現相當優雅,他們使用taglib將特定數據集拉入pageView。 Taglib記錄在TLD內部,使用起來很愉快。突然之間,我可以在多個頁面上重複使用數據,而不會弄亂控制器。

因此,在這個項目中,我不得不實施「重新設計」,所有拉動解決方案的數據使我的工作輕鬆了很多,但是在它們所使用的數據注入點(MVC)這是一個痛苦的屁股(我我不是一個Java開發人員)和Java開發人員來幫助解決問題。

另外taglibs在正確編寫時只能寫入一次,而使用數據注入(MVC)可以成爲您經常需要關注的子項(位於jsp的頂部)。

的Taglib例如

比方說,我們用下面的標籤定義/實現services.tld。
- getEmployeeAddress
- 裝getEmployees

<services:getEmployees filter="a"> 
    <!-- loop, get addresses, otherwise if empty list, render nothing --> 
</services:getEmployees> 

這讓我(的frontender)到幾乎任何頁面顯示僱員和他們的地址,騰出更重要的任務一個Java開發。該服務可以從pageView控制器單獨測試,pageView控制器變得複雜得多(比如說只處理身份驗證和網站範圍的功能),生活(至少對我來說)似乎更有趣。

我的問題

多部分實際上是:

1)是我的推理廢話,如果是這樣,爲什麼,從什麼角度? = P

2.)有更好的選擇嗎? (我也用瓷磚爲例)。

3.)您是否正在使用上面提到的taglib解決方案,您的經驗如何?

4.)從java開發者的角度來看,以上taglib解決方案的成本/效益/風險是什麼?我知道爲什麼MVC對於Java開發者來說很簡單,但以我的經驗(沙發)來說,它只是把困難轉移到了jsp層,就像我有時需要爲每個頁面學習一個單獨的API ......哦,作爲一名前端開發人員,我確實承認,使用Ajax進行數據抽取對我來說更加自然,而且所有這些都令人不寒而慄,在頁面加載時所有數據都是我的區域中的反模式...

+1

哦,隨時全力以赴在業務邏輯所屬= P – BGerrissen 2011-02-04 14:18:52

回答

1

您已經清楚地聽到在JSP中實現業務邏輯是不好的。但你明白爲什麼?

其中一個原因是技術問題,即何時提交HTTP響應的問題。

在基於MVC的系統中,控制器檢查參數,確定需要完成的操作並嘗試執行該操作。然後在此基礎上設置響應狀態碼並提取要顯示在響應中的數據。最後,它選擇一個視圖(例如一個JSP)並將控制權交給JSP引擎來提交HTTP響應。

如果您嘗試在JSP中執行所有操作,則會出現HTTP響應可能過早提交的問題;即在您的業務邏輯完成之前,這將決定正確的HTTP狀態碼。


你用MVC的不滿似乎從你的假設來主要根源是,控制器和視圖(JSP)是由不同的人來實現:即「前端開發」和「Java開發」誰擁有非重疊的技能組和職責範圍。我的看法是,你應該擁有能夠在「圍牆」兩側工作的「開發人員」。事實上,根本不應該有一個圍欄。

+0

啊!正如你所說,這不是MVC的錯,但開發人員? [諷刺] @BGerrisan讓下一次只僱用MVC貸記的開發者是一個教訓![/諷刺] – Christian 2011-04-17 10:56:14