是的,這是一篇吹毛求疵的文章,並不是要告訴各位如何建立客製的 Action Filters,而是跟各位說「應該怎麼建立」Action Filters。
也許有人看完會覺得根本沒有什麼重點,但是必須要跟各位強調的就是「魔鬼藏在細節裡」,專案開發時對於細節多多的注意,並且要堅持與習慣一些作法,無論是自己一個人開發或是多人開發,只要共同依循、遵守一些默契與規定,在管理與開發維護上都會有很大的幫助與提昇開發上的效率。
剛接觸開發 ASP.NET MVC 專案的時候,很少有機會要自己客製 Action Filters,使用 ASP.NET MVC 所提供的幾個基本 Action Filters 已經足夠應付很多狀況,例如常常會用到「AuthorizeAttribute」「ChildOnlyAttribute」「OutputCacheAttribute」等。
AuthorizeAttribute.cs
ChildOnlyAttribute.cs
OutputCacheAttribute.cs
以上三個 Action Filters 類別都有共同的幾個特性:
- 一個 Action Filters 類別為一個檔案
- 檔案名稱的字尾皆為「Attribute」
- 類別名稱的字尾皆為「Attribute」
- 在類別上都有使用「AttributeUsage」,明確告知所建立的 Attribute 類別要被如何使用(是否可用於 Class 或 Method,是否能夠複用等)
再來看看 Attribute Routing 這個套件的內容,可以看到只要是 Attribute 類別,這些類別檔案的名稱都會在字尾使用「Attribute」,
類別的名稱絕對不會省略「Attribute」
有時候我們自己所建立的 Action Filters 類別,類別的實作內容並不是很複雜,可能程式只有幾行,所以就會有人將這些 Action Filters 類別都建立在同一個 cs 檔案中,例如:
其實我不太喜歡這樣的建立方式,在使用這些 Action Filters 的時候就要使用常常的一大串,例如:
如果要建立 Custom Action Filters,可以在 ASP.NET MVC 專案下建立「ActionFilters」或「Filters」的資料夾,讓開發人員馬上就可以知道 Custom Action Filters 的檔案是放在哪裡,而如果專案還會客製 ActionResult 或 Model Binder 之類的檔案,可以在 ASP.NET MVC 專案下建立「Infrastructure」的資料夾,然後在這個資料夾裡再去各自建立專屬的目錄。
例如:
如果你不想要在這些 Custom Action Filters 的檔案名稱使用 Attribute 當作字尾的話,我建議可以改用「ActionFilter」來當作字尾,會更為明確,可以與既有的 Attribute 但又不是 ActionFilter 功能的類別做個區分,
以上就是我對於 Custom Action Filters 於建立時應該注意以及建議的地方,小細節還是要大用心。
延伸閱讀:
MSDN - AttributeUsage (C# 和 Visual Basic)
ASP.NET MVC 4 Custom Action Filters : The Official Microsoft ASP.NET Site
以上
沒有留言:
張貼留言