Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 12 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
12
Dung lượng
395,27 KB
Nội dung
Chương MƠ HÌNH LAYER Giới thiệu Trong phát triển ứng dụng, để dễ quản lý thành phần hệ thống, không bị ảnh hưởng thay đổi, người ta hay nhóm thành phần có chức lại với phân chia trách nhiệm cho nhóm để cơng việc khơng bị chồng chéo ảnh hưởng lẫn Ví dụ cơng ty bạn có phòng ban, phòng ban chịu trách nhiệm cơng việc cụ thể đó, phòng khơng can thiệp vào cơng việc nội phòng Phòng tài phát lương, chuyện lấy tiền đâu phát cho anh phòng Marketing anh khơng cần biết Trong phát triển phần mềm, người ta áp dụng cách phân chia chức Bạn nghe nói đến thuật ngữ kiến trúc nhiều Layer, Layer thực chức đó, mơ hình Layer phổ biến Layer Presentation Layer, Business Logic Layer, Data Access Layer Các Layer giao tiếp với thông qua dịch vụ (services) mà Layer cung cấp để tạo nên ứng dụng, Layer không cần biết bên Layer làm mà cần biết Layer cung cấp dịch vụ cho sử dụng mà thơi Kiến trúc P a g e | 45 2.1 Presentation Layer Layer làm nhiệm vụ giao tiếp với người dùng cuối để thu thập liệu hiển thị kết quả/dữ liệu thông qua thành phần giao diện người sử dụng Layer sử dụng dịch vụ Business Logic Layer cung cấp Trong NET bạn dùng Windows Forms, ASP.NET hay Mobile Forms để thực Layer Trong Layer có thành phần User Interface Components User Interface Process Components User Interface Components phần tử chịu trách nhiệm thu thập hiển thị thông tin cho người dùng cuối Trong ASP.NET thành phần TextBox, Button, DataGrid… User Interface Process Components: thành phần chịu trách nhiệm quản lý qui trình chuyển đổi UI Components Ví dụ chịu trách nhiệm quản lý hình nhập liệu loạt thao tác định trước bước Wizard… 2.2 Business Logic Layer Layer thực nghiệp vụ hệ thống, sử dụng dịch vụ Data Access Layer cung cấp, cung cấp dịch vụ cho Presentation Layer Lớp sử dụng dịch vụ nhà cung cấp thứ (3rd parties) để thực cơng việc (ví dụ sử dụng dịch vụ cổng toán trực tuyến VeriSign, Paypal…) Trong Layer có thành phần Business Components, Business Entities Service Interface Service Interface phương thức mà Layer cung cấp cho Presentation Layer sử dụng Presentation Layer cần biết dịch vụ thông qua giao diện mà không cần phải quan tâm đến bên lớp thực Business Entities thực thể mô tả đối tượng thông tin mà hệ thống xử lý Các business entities dùng để trao đổi thông tin Presentation Layer Data Access Layer P a g e | 46 Business Components thành phần thực dịch vụ mà Service Interface cung cấp, chịu trách nhiệm kiểm tra ràng buộc logic (constraints), qui tắc nghiệp vụ (business rules), sử dụng dịch vụ bên khác để thực yêu cầu ứng dụng 2.3 Data Access Layer Layer thực nghiệp vụ liên quan đến lưu trữ truy xuất liệu ứng dụng Thường lớp sử dụng dịch vụ hệ quản trị sở liệu SQL Server, Oracle,… để thực nhiệm vụ Trong lớp có thành phần Data Access Logic, Data Sources, Servive Agents) Data Access Logic components (DALC) thành phần chịu trách nhiệm lưu trữ vào truy xuất liệu từ nguồn liệu – Data Sources RDMBS, XML, File systems… Trong NET Các DALC thường thực cách sử dụng thư viện ADO.NET để giao tiếp với hệ sở Xây dựng Entities Layer 3.1 Xây dựng class Entities Để đóng gói thuộc tính tbProduct, khai báo class tbProduct sau: public class tbProduct { } Sau đó, khai báo thuộc tính Product tạo phương thức get set cho thuộc tính public class tbProduct { private int iD; public int ID { get { return iD; } set { iD = value; } } P a g e | 47 private string productName; public string ProductName { get { return productName; } set { productName = value; } } private int category; public int Category { get { return category; } set { category = value; } } private string imageURL; public string ImageURL { get { return imageURL; } set { imageURL = value; } } private string description; public string Description { get { return description; } set { description = value; } } private int price; public int Price { get { return price; } set { price = value; } } } 3.2 Xây dựng class Columns Để ghi nhớ cột bảng tbProduct, khai báo enum tbProductColumns Trong enum có tên xác cột bảng tbProduct public enum tbProductColumns P a g e | 48 { ID, ProductName, Category, ImageURL, Description, Price } Sau khai báo class tbProductColumns, không cần phải vào sở liệu để xem tên cột bảng tbProduct nữa, mà cần sử dụng enum tbProductColumns 3.3 Xây dựng lớp Collection Để biểu diễn cho danh sách tbProduct khai báo class tbProductCollection kế thừa List sau: public class tbProductCollection : List{} Khi cần biểu diễn danh sách sản phẩm, sử dụng class tbProductCollection mà không cần phải dùng thông qua List ArrayList Xây dựng Data Access Layer 4.1 Thuộc Tính SqlConnection Để thao tác với Cơ Sở Dữ Liệu cần phải khai báo đối tượng SqlConnection private SqlConnection cn = null; 4.2 Phương thức khởi tạo Sau khai báo đối tượng SqlConnection, cần khởi tạo đối tượng sử dụng phương thức open() để bật kết nối với CSDL public tbCategoryDAL() { P a g e | 49 string stringConnection = ConfigurationSettings.AppSettings["connectionstring"].ToString(); cn = new SqlConnection(stringConnection); cn.Open(); } 4.3 Phương thức Hủy Khi khơng dùng đối tượng Data Access Layer C# tự động gọi phương thức hủy Trong phương thức hủy gọi phương thức Close() Dispose() để hủy đối tượng SqlConnection ~tbProductDAL() { this.sqlCn.Close(); this.sqlCn.Dispose(); } 4.4 Phương thức Insert Phương thức Insert dùng để thêm đối tượng tbProduct vào Cơ Sở Dữ Liệu Phương thức nhận vào đối tượng Entities tbProduct Chúng ta khai báo đối tượng SqlCommand khởi tạo đối tượng với hai tham số là: tên Store Proceduce: sp_tbProduct_Insert đối tượng SqlConnection mà khởi tạo hàm khởi tạo đối tượng Data Access Layer Sau khởi tạo đối tượng SqlCommand, cần truyền tham số vào cho Store Proceduce gọi phương thức ExecuteNonQuery() để thực thi Store Procedure: sp_tbProduct_Insert public void Insert(tbProduct product) { SqlCommand cm = new SqlCommand("sp_tbProduct_Insert", this.sqlCn); P a g e | 50 cm.CommandType = CommandType.StoredProcedure; cm.Parameters.AddWithValue("@ProductName", product.ProductName); cm.Parameters.AddWithValue("@CategoryID", product.CategoryID); cm.Parameters.AddWithValue("@ImageURL", product.ImageURL); cm.Parameters.AddWithValue("@Description", product.Description); cm.Parameters.AddWithValue("@Price", product.Price); cm.ExecuteNonQuery(); } 4.5 Phương thức Update Phương thức Update dùng để chỉnh sửa đối tượng tbProduct Cơ Sở Dữ Liệu Phương thức nhận vào đối tượng Entities tbProduct Chúng ta khai báo đối tượng SqlCommand khởi tạo đối tượng với hai tham số là: tên Store Proceduce: sp_tbProduct_Update đối tượng SqlConnection mà khởi tạo hàm khởi tạo đối tượng Data Access Layer Sau khởi tạo đối tượng SqlCommand, cần truyền tham số vào cho Store Proceduce gọi phương thức ExecuteNonQuery() để thực thi Store Procedure: sp_tbProduct_Update public void Update(tbProduct product) { SqlCommand cm = new SqlCommand("sp_tbProduct_Update", this.sqlCn); cm.CommandType = CommandType.StoredProcedure; cm.Parameters.AddWithValue("@ID", product.ID); cm.Parameters.AddWithValue("@ProductName", product.ProductName); cm.Parameters.AddWithValue("@CategoryID", product.CategoryID); cm.Parameters.AddWithValue("@ImageURL", product.ImageURL); cm.Parameters.AddWithValue("@Description", product.Description); P a g e | 51 cm.Parameters.AddWithValue("@Price", product.Price); cm.ExecuteNonQuery(); } 4.6 Phương thức Delete Phương thức Delete dùng để xóa đối tượng tbProduct Cơ Sở Dữ Liệu Phương thức nhận vào ID Product cần xóa Chúng ta khai báo đối tượng SqlCommand khởi tạo đối tượng với hai tham số là: tên Store Proceduce: sp_tbProduct_Delete đối tượng SqlConnection mà khởi tạo hàm khởi tạo đối tượng Data Access Layer Sau khởi tạo đối tượng SqlCommand, cần truyền ID cần xóa vào cho Store Proceduce gọi phương thức ExecuteNonQuery() để thực thi Store Procedure: sp_tbProduct_Delete public void Delete(int iD) { SqlCommand cm = new SqlCommand("sp_tbProduct_Delete", this.sqlCn); cm.CommandType = CommandType.StoredProcedure; cm.Parameters.AddWithValue("@ID", iD); cm.ExecuteNonQuery(); } 4.7 Phương thức Get Phương thức Get dùng để lấy đối tượng tbProduct từ Cơ Sở Dữ Liệu thỏa mãn điều kiện truyền vào Phương thức nhận vào: Where, PageIndex, PageSize, OrderBy, OrderDirection, trả danh sách tbProduct TotalRecords Chúng ta khai báo đối tượng SqlCommand khởi tạo đối tượng với hai tham số là: tên Store Proceduce: sp_tbProduct_GET đối tượng SqlConnection mà khởi tạo hàm khởi tạo đối tượng Data Access Layer P a g e | 52 Sau khởi tạo đối tượng SqlCommand, cần truyền tham số vào cho Store Proceduce Chúng ta khai báo khởi tạo đối tượng SqlDataAdapter từ đối tượng SqlCommand Khai báo đối tượng DataSet dùng phương thức Fill() đối tượng SqlDataAdapter để đổ liệu từ sở liệu vào đối tượng DataSet Duyệt dòng liệu DataSet chuyển đổi thành đối tượng tbProduct, sau thêm đối tượng vào danh sách sản phẩm khai báo thông qua đối tượng tbProductCollection Chúng ta nhận giá trị TotalRecords cách parse giá trị tham số TotalRecords giá trị int public tbProductCollection GET(string Where, int PageIndex, int PageSize, string OrderBy, string OrderDirection, out int TotalRecords) { SqlCommand cm = new SqlCommand("sp_tbProduct_GET", this.sqlCn); cm.CommandType = CommandType.StoredProcedure; cm.Parameters.AddWithValue("@Where", Where); cm.Parameters.AddWithValue("@PageIndex", PageIndex); cm.Parameters.AddWithValue("@PageSize", PageSize); cm.Parameters.AddWithValue("@OrderBy", OrderBy); cm.Parameters.AddWithValue("@OrderDirection", OrderDirection); SqlParameter param = new SqlParameter("@TotalRecords", DbType.Int32); param.Direction = ParameterDirection.Output; cm.Parameters.Add(param); SqlDataAdapter da = new SqlDataAdapter(cm); DataSet ds = new DataSet(); P a g e |53 da.Fill(ds); tbProductCollection productCollection = new tbProductCollection(); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { tbProduct product = new tbProduct(); product.ID = int.Parse(ds.Tables[0].Rows[i]["ID"].ToString()); product.ProductName = ds.Tables[0].Rows[i]["ProductName"].ToString(); product.ImageURL = ds.Tables[0].Rows[i]["ImageURL"].ToString(); product.CategoryID = int.Parse(ds.Tables[0].Rows[i]["CategoryID"].ToString()); product.Description = ds.Tables[0].Rows[i]["Description"].ToString(); product.Price = int.Parse(ds.Tables[0].Rows[i]["Price"].ToString()); productCollection.Add(product); } TotalRecords = int.Parse(cm.Parameters["@TotalRecords"].Value.ToString()); return productCollection; } Xây dựng Business Layer 5.1 Phương thức Insert Phương thức Insert khai báo phương thức static Do khơng cần phải khởi tạo đối tượng Bussiness để gọi phương thức Insert P a g e | 54 Nếu có quy định nghiệp vụ, cần kiểm tra liệu trước Insert vào sở liệu Trong ví dụ khơng có quy định nghiệp vụ nên không cần kiểm tra Khai báo khởi tạo đối tượng tbProductDAL, sau gọi phương thức Insert để thêm đối tượng tbProduct vào sở liệu public static void Insert(tbProduct product) { tbProductDAL productDAL = new tbProductDAL(); productDAL.Insert(product); } 5.2 Phương thức Update Phương thức Update khai báo phương thức static Do khơng cần phải khởi tạo đối tượng Bussiness để gọi phương thức Update Nếu có quy định nghiệp vụ, cần kiểm tra liệu trước Update đối tượng tbProduct sở liệu Trong ví dụ khơng có quy định nghiệp vụ nên không cần kiểm tra Khai báo khởi tạo đối tượng tbProductDAL, sau gọi phương thức Update để sửa đối tượng tbProduct sở liệu public static void Update(tbProduct product) { tbProductDAL productDAL = new tbProductDAL(); productDAL.Update(product); } 5.3 Phương thức Delete Phương thức Delete khai báo phương thức static Do không cần phải khởi tạo đối tượng Bussiness để gọi phương thức Delete P a g e | 55 Nếu có quy định nghiệp vụ, cần kiểm tra liệu trước Delete đối tượng tbProduct sở liệu Trong ví dụ khơng có quy định nghiệp vụ nên khơng cần kiểm tra Khai báo khởi tạo đối tượng tbProductDAL, sau gọi phương thức Delete để xóa đối tượng tbProduct sở liệu public static void Delete(int iD) { tbProductDAL productDAL = new tbProductDAL(); productDAL.Delete(iD); } 5.4 Phương thức Get Phương thức GET khai báo phương thức static Do khơng cần phải khởi tạo đối tượng Bussiness để gọi phương thức GET Khai báo khởi tạo đối tượng tbProductDAL, sau gọi phương thức GET truyền vào tham số cần thiết để lấy tbProduct sở liệu thích hợp publicc static tbProductCollection GET(string Where, int PageIndex, int PageSize,string OrderBy, string OrderDirection, out int TotalRecords) { tbProductDAL productDAL = new tbProductDAL(); return productDAL.GET(Where, PageIndex, PageSize, OrderBy, OrderDirection, out TotalRecords); } ... không cần phải vào sở liệu để xem tên cột bảng tbProduct nữa, mà cần sử dụng enum tbProductColumns 3. 3 Xây dựng lớp Collection Để biểu diễn cho danh sách tbProduct khai báo class tbProductCollection... SqlParameter("@TotalRecords", DbType.Int32); param.Direction = ParameterDirection.Output; cm.Parameters.Add(param); SqlDataAdapter da = new SqlDataAdapter(cm); DataSet ds = new DataSet(); P a g e | 53 da.Fill(ds); tbProductCollection... (constraints), qui tắc nghiệp vụ (business rules), sử dụng dịch vụ bên khác để thực yêu cầu ứng dụng 2 .3 Data Access Layer Layer thực nghiệp vụ liên quan đến lưu trữ truy xuất liệu ứng dụng Thường lớp