+1

ASP.NET MVC Tip #4 - Tạo một Custom Data Controller Base Class

Trong thủ thuật này, bạn sẽ tìm hiểu làm thế nào để tạo ra một custom controller base class cho thấy nhiều actions để thực hiện các hoạt động cơ sở dữ liệu phổ biến như hiển thị, chèn, cập nhật và xóa dữ liệu.

Bất cứ khi nào bạn viết mã và bạn phát hiện ra rằng bạn đang viết cùng loại mã hơn và lặp lại, đó là một thời điểm tốt để dừng lại và xem xét liệu bạn đang lãng phí một lượng lớn thời gian. Hôm qua, tôi phát hiện ra rằng tôi đã trong tình huống này trong khi xây dựng một ứng dụng web database-driven ASP.NET MVC. Tôi cần thực hiện bộ tiêu chuẩn cùng các hoạt động cơ sở dữ liệu - hiển thị dữ liệu, cập nhật dữ liệu, dữ liệu chèn, xóa dữ liệu - cho mỗi bảng cơ sở dữ liệu trong ứng dụng của tôi. Viễn cảnh tồi tệ vì phải viết mã cứ lặp đi lặp lại, dẫn đến cảm hứng cho tôi để viết tip ASP.NET MVC này.

Một controller MVC chỉ là một lớp (Visual Basic hoặc C #). Các lớp hỗ trợ thừa kế. Vì vậy, nếu bạn thấy mình viết cùng một logic chính xác cho những controller actions của bạn, nó hướng đến viết một lớp cơ sở mới có chứa các thiết lập chung của các actions. Trong thủ thuật này, chúng ta sẽ tạo ra một lớp base controller thực hiện các hoạt động cơ sở dữ liệu chuẩn. Hãy nhớ rằng bạn có thể tạo các lớp base controller cho các loại controller actions dùng chung khác nhau.

Tôi tạo ra một base controller được đặt tên lớp DataController. Lớp này hỗ trợ các phương thức public sau:

Index () - Hiển thị tất cả các bản ghi cơ sở dữ liệu trong một bảng cơ sở dữ liệu Details() - Hiển thị một bản ghi duy nhất từ một bảng cơ sở dữ liệu Edit() - Hiển thị một view để chỉnh sửa một bản ghi cơ sở dữ liệu hiện có Update() - cập nhật một record dữ liệu trong cơ sở dữ liệu New () - Hiển thị một view cho chèn một bản ghi cơ sở dữ liệu mới Insert () - Chèn một bản ghi mới vào cơ sở dữ liệu Delete () - Xóa một bản ghi hiện tại từ cơ sở dữ liệu

Kể từ khi mỗi method này là công khai, mỗi một method như một hành động. Bạn có thể gọi bất kỳ method này bằng cách gõ URL đúng trong thanh địa chỉ trình duyệt web của bạn.

Lớp DataController cũng hỗ trợ một số protected methods:

DBSave () - Hoặc chèn hoặc cập nhật một bản ghi cơ sở dữ liệu DBInsert () - Chèn một bản ghi dữ liệu mới DBUpdate () - Cập nhật sbản ghi dữ liệu hiện có DBDelete () - Xóa một bản ghi cơ sở dữ liệu hiện có DBGet () - Lấy một bản ghi duy nhất Kể từ khi các method này là protected, không thể được gọi thông qua một địa chỉ URL. Tuy nhiên, bạn có thể gọi bất kỳ các method này trong lớp điều khiển nguồn gốc của mình. Đây là những method hữu ích hữu ích mà bạn có thể gọi từ controller’s action methods.

Cuối cùng, lớp DataController hỗ trợ các thuộc tính sau:

DataContext – The LINQ to SQL data context. Table – The LINQ to SQL Table. IdentityColumnName - Tên của cột chứa trong bảng cơ sở dữ liệu.

Các tính chất này cũng được bảo vệ. Bạn có thể sử dụng chúng từ bên trong lớp điều khiển gốc của mình, nhưng họ không được tiếp xúc được ontroller actions.

Các DataController là class generic. Khi bạn tạo một bộ điều khiển có nguồn gốc từ lớp DataController, bạn phải xác định loại thực thể cơ sở dữ liệu mà lớp DataController đại diện. Lớp DataController làm việc với LINQ to SQL. Trước khi bạn sử dụng lớp DataController, trước tiên bạn phải tạo thực thể LINQ to SQL đại diện cho đối tượng cơ sở dữ liệu của bạn.

Ví dụ, Listing 1 chứa một lớp HomeController mà xuất phát từ lớp DataController. Chú ý rằng các loại Phim được chuyển đến lớp DataController. Lớp Movie is a LINQ to SQL entity được tạo ra với Visual Studio Object Relational Designer.

Listing1 - HomeController.vb (VB)

1: Imports System
2: Imports System.Collections.Generic
3: Imports System.Linq
4: Imports System.Web
5: Imports System.Web.Mvc
6:  
7:  
8: Namespace Tip4.Controllers
9:     Public Class HomeController
10:         Inherits DataController(Of Movie)
11:  
12:         ''' <summary>
13:         ''' Show Movies in a Category
14:         ''' </summary>
15:         Public Function Category(ByVal Id As Integer) As ActionResult
16:             Dim results = From m In Me.Table Where m.CategoryId = Id Select m
17:             Return View(results)
18:         End Function
19:  
20:     End Class
21: End Namespace
22:  

Listing1 – HomeController.vb (CS)

1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Web;
5: using System.Web.Mvc;
6:  
7: using Tip4.Models;
8:  
9: namespace Tip4.Controllers
10: {
11:     public class HomeController : DataController<Movie>
12:     {
13:  
14:         /// <summary>
15:         /// Show Movies in a Category
16:         /// </summary>
17:         public ActionResult Category(int Id)
18:         {
19:             var results = from m in this.Table where m.CategoryId == Id select m;
20:             return View(results);
21:         }
22:  
23:  
24:     }
25: }

Bởi vì lớp HomeController xuất phát từ lớp DataController, lớp HomeController có Index (), Details(), Create (), New (), Edit (), Update (), và Delete () hoạt động tự động. Bởi vì thực thể Movie sẽ được chuyển cho các DataController, các HomeController cho phép bạn thực hiện những hành động đối lại các bảng cơ sở dữ liệu phim.

Trước khi bạn sử dụng lớp DataController, bạn phải thêm một chuỗi kết nối có tên dataController đến file web.config của ứng dụng của bạn. Bạn có thể sao chép các chuỗi kết nối được tạo ra bởi Visual Studio Object Relational Designer và đổi tên các chuỗi kết nối dataController.

Bạn vẫn phải tạo ra một tập hợp các views để sử dụng lớp DataController. Bạn cần phải tạo các views:

index.aspx Details.aspx Create.aspx Edit.aspx

Lần sau, tôi sẽ chỉ cho bạn cách để tạo ra những view chỉ một lần cho tất cả các lớp điều khiển của bạn bằng cách tạo ra Shared Views. Quay lại chủ đề của DataController.

Thật không may, mã cho lớp DataController quá dài để dán vào blog entry này. Bạn có thể tải về DataController, ở phần cuối của entry blog này.

Project mẫu chứa bốn view nêu trên. Bạn có thể sử dụng dự án mẫu để hiển thị, chèn, cập nhật và xóa các bản ghi từ bảng Phim sở dữ liệu. Ví dụ, Hình 1 chứa các trang được tạo ra bởi view index.aspx.

Figure 1 –The Index.aspx View alt

Mong đợi và hy vọng của tôi là sẽ có hàng trăm lớp custom base controller được tạo ra bởi developers tích cực làm việc với các framework ASP.NET MVC khi framework cuối cùng đã phát hành. Tôi có thể tưởng tượng các lcustom base controller được sử dụng trong một số kịch bản khác nhau: xác thực, giỏ hàng, catalog sản phẩm, và vân vân. Bất cứ lúc nào mà bạn cần một tập actions cho một ứng dụng, hãy nghĩ đến tạo ra controller base class.

Download the Code

Nguồn: https://weblogs.asp.net/stephenwalther/asp-net-mvc-tip-4-create-a-custom-data-controller-base-class


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.