原文地址:http://weblogs.asp.net/stephenwalther/archive/2008/06/27/asp-net-mvc-tip-11-use-standard-controller-action-names.aspx
摘要:在這個Tip中,Stephen Walther建議你為控制器操作使用標準的名字,這樣可以使你的代碼對其他開發人員更明晰。
採用命名規範可以使其他開發人員——以及你自己將來——更容易閱讀你的代碼。命名規範還可以為你節省時間,可以避免費力去討論“正確的”命名方式。在這個Tip中,我建議為ASP.NET MVC控制器操作使用標準的名字。
下面這個表格列出了控制器操作的標準名字:
操作 |
樣本URL |
說明 |
Details |
/Product/Details/5 |
顯示一個單獨的資源如一條資料庫記錄。例如,顯示Id為5的一個單獨的Product。 |
Index |
/Product/Index |
顯示一組資源。例如,顯示資料庫裡產品表中的所有產品。 |
Create |
/Product/Create |
顯示用於建立一個新資源的表單。例如,顯示一個用於建立新產品的表單。 |
Insert |
/Product/Insert |
將一個新資源插入資料庫。通常,在完成一次插入後你應該重新導向到其它操作。 |
Edit |
/Product/Edit/5 |
顯示用於編輯一個現有資源的表單。例如,顯示一個用於編輯Id為5的產品的表單。 |
Update |
/Product/Update/5 |
更新資料庫中的現有資源。通常,在完成一次更新後你應該重新導向到其它操作。 |
Destroy |
/Product/Destroy/5 |
顯示一個頁面,確認是否真的希望從資料庫中刪除一個資源。 |
Delete |
/Product/Delete/5 |
從資料庫中刪除一個資源。通常,在完成一次刪除後你應該重新導向到其它操作。 |
Login |
/Home/Login |
顯示一個登入表單。 |
Logout |
/Home/Logout |
登出一個使用者。通常,在完成一次登出後你應該重新導向到其它操作。 |
Authenticate |
/Home/Authenticate |
驗證一對使用者名稱和密碼。通常,在完成一次驗證後你應該重新導向到其它操作。 |
我的這些操作名字(非常粗略)是基於Adam Tybor在其MvcContrib項目的Simply Restful Route Handler中使用的命名規範的。該項目位於:
http://www.codeplex.com/MVCContrib/Wiki/View.aspx?title=SimplyRestfulRouting&referringTitle=Documentation
然而,Adam Tybor的約定和我這裡建議的有著顯著的不同。下面我來介紹一下二者的區別。
首先,Adam Tybor利用不同的HTTP謂詞來指出要執行那個控制器操作(他有“REST癖”,he is being a REST purist)。例如,Adam Tybor建議同一個URL既用於刪除也用於更新一個資源:
/Product/34
當使用HTTP PUT請求該URL時,將更新一條現有記錄。當使用HTTP DELETE請求相同的URL時,將刪除一條現有記錄。Adam Tybor提出的原因是有意義的。他的建議和這些HTTP謂詞的目的是統一的。然而,Adam Tybor得難以不能和預設的ASP.NET MVC路由一起工作。因此,我建議你在進行刪除和更新時使用明確的URL:
/Product/Update/34
/Product/Delete/34
如果你使用這些命名規範,你將可以使用預設的ASP.NET MVC路由表。
我這裡建議的控制器操作命名規範和我所見過的其他命名規範之間的另外一個重要區別在於,為建立一個新的資源這樣一個操作所取的名字。我見過在建立新的資源時有人用過下面這樣的操作名字:
/Product/New
/Product/Create
通常,New操作用於顯示用於建立新資源的表單,而Create操作實際執行資料庫插入操作。
問題在於使用New作為操作名字可能會和C#以及Visual Basic .NET關鍵字衝突。當在Visual Basic .NET應用程式中建立一個名為New的控制器操作時,您必須總要記得將其名字轉義為[New]。持續地轉義一個名字很快就會變得枯燥,而且對於那些不理解這個方括弧的含義的人來說,這樣會引起混淆。因此,我建議使用Create和Insert對來代替New和Create對。
你可能已經注意到了,我在試圖讓操作和(實際)執行的資料庫操作中的SQL語句名字對應起來。因此,下面的URL應該是用於顯示表單的:
/Product/Create
/Product/Edit/1
/Product/Destroy/1
而下面的URL應該是用於執行資料庫操作的:
/Product/Insert
/Product/Update/1
/Product/Delete/1
對命名規範提出建議總是有風險的,因為開發人員對於如何正確地取名總是具有強烈的個人意見。然而,我希望這篇Tip能夠作為你開發一款命名規範的起點。
------
本文沒有代碼。廣告還是.NETRegex庫,http://regex-lib.net。