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