無論什麼時候,你在寫代碼時都會發現其實你在一遍又一遍地編寫著同樣類型的代碼,現在是時候停下來考慮一下你是否正在浪費者大量的時間。昨天,我發現在創建一個數據庫驅動的ASP.NET MVC應用程序時,我的確處在這樣一種情形中。我不得不為應用程序中的每一個數據庫表進行標准的操作——顯示數據、更新數據、插入數據、刪除數據。一遍又一遍地編寫完全相同的代碼,這種可怕的現象賦予我靈感,讓我寫下了今天這篇ASP.NET MVC Tip。
MVC控制器就是一個類(Visual Basic或C#類)。既然是類,就可以支持繼承。因此,如果你發現你正在為控制器action編寫重復的代碼,就有必要編寫一個新的基類了,讓它包含一組常見的action。在這個Tip中,我們一起來創建一個數據控制器基類,它能夠執行標准的數據庫操作。要記住,你也可以為其他類型的常見控制器action編寫基類。
我建立了一個名為DataController的控制器基類。該類提供了下列公共方法:
Index()——顯示一個數據表中所有的數據記錄
Details()——顯示數據庫表中的一條數據記錄
Edit()——顯示一個視圖,其中包含一個用於編輯現有數據記錄的窗體
Update()——更新數據庫中的數據記錄
New()——顯示一個視圖,用於插入新的數據庫記錄
Insert()——向數據庫中插入一條新的數據記錄
Delete()——從數據庫中刪除一條現有記錄
由於這些方法都是公共的,所以每個方法都會暴露為一個action。你只要在Web浏覽器地址欄中輸入正確的URL,就能調用這些方法。
DataController還包含一些受保護的方法:
DBSave()——插入或更新數據庫記錄
DBInsert()——插入新的數據庫記錄
DBUpdate()——更新現有的數據庫記錄
DBDelete()——刪除現有的數據庫記錄
DBGet()——獲取單獨一條數據庫記錄
由於這些方法是受保護的,所以他們不能通過URL調用。然而,你可以在派生類中調用這些方法。這些都是有用的工具方法,你可以通過調用這些方法來實現派生類的控制器action方法。
最後,DataController類還提供了下列方法:
DataContext——LINQ to SQL數據上下文
table——LINQ to SQL表
IdentityColumnName——數據表中包含的標識列
這些屬性也是受保護的。你可以在派生類中使用它們,但他們不會被暴露為控制器action。