ASP.NET MVC社區討論了在使用WebFormsViewEngine時,是否仍然需要代碼隱 藏文件,以及這是一個優點還是缺點或甚至是一個問題。
ASP.NET MVC默認仍然使用WebFormsViewEngine。當使用Visual Studio向 ASP.NET MVC應用程序增加一個WebForms視圖時會自動增加一個代碼隱藏文件和一 個設計器文件。許多人認為代碼隱藏文件已經被廢棄了,它們的用法頗令人困惑 ,因為開發人員傾向於使用像傳統的合而為一的ASP.NET Web窗體那樣的視圖。
Steve Smith更進一步的表明ASP.NET MVC Codebehind文件的壞處,因為他們 引誘開發人員將邏輯添加到視圖上,視圖在設計上應當保持“啞的” :
代碼隱藏文件是一個誘惑。對於不熟悉ASP.NET MVC (ASP.NET MVC還不到一年 時間而且還沒有發布)但是有Web窗體開發背景(大多數)的開發人員,他們始終 有一個將代碼寫入隱藏代碼文件傾向。這會使得在視圖裡的邏輯難以測試,最壞 的可能是甚至在代碼隱藏文件中包含的邏輯直接調用數據庫或者是web service, 以致完全繞過模型同視圖的分離。
Steve解釋了在某種情況下代碼隱藏文件是一個不好但卻必不可少的東西,例 如你想在一個強類型的視圖通過強類型方式引用模型(Model)。有寫人認為隱藏 代碼頁也可用來存儲一些視圖邏輯,而其他方式可能會弄亂ASPX文件。最後但並 不是最不重要的一點是他們為了在ASPX文件上獲得智能提示技術的支持。至於第 一個問題,Tim Barcz演示了如何使用沒有代碼隱藏使用強類型的ViewData,通過 合並泛型的CLR表示法來取代C#或者VB的表示法:
Inherits="System.Web.Mvc.ViewPage`1 [[ABCCompany.MVC.Web.Models.LoginData, ABCCompany.MVC.Web]]"
CLR表示法在單引號後面指定了泛型參數的數量,後面跟參數和包含參數類型 的程序集。
Luis Abreu不同意Steve的用法並在貼子做出了回應。他說“不能確定刪 除隱藏代碼文件就可以彌補一個‘不合格’程序員的不足”,因 為邏輯仍然可以放在ASPX文件的腳本塊裡。Luis也不同意“啞”視圖 的一般觀點。他認為視圖可能混合了“展現的相關代碼”,並且這些 代碼應該被放在隱藏代碼文件中而不是在控制器中或者直接寫在ASPX文件裡,這 樣會破壞標記和代碼之間的清晰分離。
查看英文原文:http://www.infoq.com/news/2008/09/aspnet-mvc- codebehind