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

 

以上

沒有留言:

張貼留言

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。