網頁

2013年12月9日 星期一

ASP.NET MVC – 有關 Custom Action Filters 的建議

是的,這是一篇吹毛求疵的文章,並不是要告訴各位如何建立客製的 Action Filters,而是跟各位說「應該怎麼建立」Action Filters。

也許有人看完會覺得根本沒有什麼重點,但是必須要跟各位強調的就是「魔鬼藏在細節裡」,專案開發時對於細節多多的注意,並且要堅持與習慣一些作法,無論是自己一個人開發或是多人開發,只要共同依循、遵守一些默契與規定,在管理與開發維護上都會有很大的幫助與提昇開發上的效率。

 


剛接觸開發 ASP.NET MVC 專案的時候,很少有機會要自己客製 Action Filters,使用 ASP.NET MVC 所提供的幾個基本 Action Filters 已經足夠應付很多狀況,例如常常會用到「AuthorizeAttribute」「ChildOnlyAttribute」「OutputCacheAttribute」等。

AuthorizeAttribute.cs

image

ChildOnlyAttribute.cs

image

OutputCacheAttribute.cs

image

以上三個 Action Filters 類別都有共同的幾個特性:

  • 一個 Action Filters 類別為一個檔案
  • 檔案名稱的字尾皆為「Attribute」
  • 類別名稱的字尾皆為「Attribute」
  • 在類別上都有使用「AttributeUsage」,明確告知所建立的 Attribute 類別要被如何使用(是否可用於 Class 或 Method,是否能夠複用等)

 

再來看看 Attribute Routing 這個套件的內容,可以看到只要是 Attribute 類別,這些類別檔案的名稱都會在字尾使用「Attribute」,

image

類別的名稱絕對不會省略「Attribute」

image

image

 

有時候我們自己所建立的 Action Filters 類別,類別的實作內容並不是很複雜,可能程式只有幾行,所以就會有人將這些 Action Filters 類別都建立在同一個 cs 檔案中,例如:

image

其實我不太喜歡這樣的建立方式,在使用這些 Action Filters 的時候就要使用常常的一大串,例如:

image

 

如果要建立 Custom Action Filters,可以在 ASP.NET MVC 專案下建立「ActionFilters」或「Filters」的資料夾,讓開發人員馬上就可以知道 Custom Action Filters 的檔案是放在哪裡,而如果專案還會客製 ActionResult 或 Model Binder 之類的檔案,可以在 ASP.NET MVC 專案下建立「Infrastructure」的資料夾,然後在這個資料夾裡再去各自建立專屬的目錄。

例如:

image

image

如果你不想要在這些 Custom Action Filters 的檔案名稱使用 Attribute 當作字尾的話,我建議可以改用「ActionFilter」來當作字尾,會更為明確,可以與既有的 Attribute 但又不是 ActionFilter 功能的類別做個區分,

image

image

 


以上就是我對於 Custom Action Filters 於建立時應該注意以及建議的地方,小細節還是要大用心。

 

延伸閱讀:

MSDN - ASP.NET MVC 應用程式中的動作篩選

MSDN - AttributeUsage (C# 和 Visual Basic)

ASP.NET MVC 4 Custom Action Filters : The Official Microsoft ASP.NET Site

 

以上

沒有留言:

張貼留言