SlideShare una empresa de Scribd logo
1 de 3
Hiện thực lớp Business Logic & Data Access

Sau khi đã xong bước thiết kế, chúng ta sẽ tiến hành hiện thực 2 lớp Business và Data Access. Các

bạn có thể xem source code đính kèm để biết chi tiết cách hiện thực 2 lớp này như thế nào. Lớp

Presentation sẽ được thiết kế và hiện thực trong bài viết tiếp theo. Phần bên dưới tôi sẽ trình bày một

số điểm chính trong cách hiện thực.

Hiện thực Data Access Components

Do ứng dụng của chúng ta đơn giản nên được giới hạn sẽ dùng với CSDL SQL Server 2000/2005 nên

lớp này không được thiết kế để chạy cùng lúc với nhiều loại database khác nhau. Chúng ta sẽ dùng cái

Stored Procedures để truy xuất dữ liệu an toàn và dễ thay đổi hơn, tránh bị các lỗi như SQL

Injection(không thể tránh hoàn toàn nếu bạn không hiện thực đúng). Các bạn có thể xem qua một

cách hiện thực một hàm cơ bản như thế nào:


       public void CreateCategory(Category category)

{

using (SqlConnection connection = GetConnection())

{

SqlCommand command = new SqlCommand(“spCategoriesCreate”, connection);

command.CommandType = CommandType.StoredProcedure;

command.Parameters.Add(new SqlParameter(“@KeyName”, category.KeyName));

command.Parameters.Add(new SqlParameter(“@Name”, category.Name));

command.Parameters.Add(new SqlParameter(“@Description”, category.Description));

command.Parameters.Add(new SqlParameter(“@Picture”, category.Picture));

SqlParameter paramCategoryId = new SqlParameter(“@CategoryId”, SqlDbType.Int, 4);

paramCategoryId.Direction = ParameterDirection.Output;

command.Parameters.Add(paramCategoryId);

connection.Open();

command.ExecuteNonQuery();

if (paramCategoryId.Value != DBNull.Value)

category.CategoryId = (int)paramCategoryId.Value;

else

throw newDataAccessException(String.Format(Resources.Strings.CreateEntityException,“Categor

y”));
}

}

Stored Procedure spCategoriesCreate đơn giản được viết như sau:



CREATE PROCEDURE dbo.spCategoriesCreate

@Name nvarchar(50),

@KeyName varchar(30),

@Description ntext,

@Picture varchar(256),

@CategoryId int output

AS

INSERT INTO Categories

(

Name,

KeyName,

Description,

Picture

)

VALUES

(

@Name,

@KeyName,

@Description,

@Picture

)

SELECT @CategoryId = SCOPE_IDENTITY()
Hiện thực lớp Business Logic
Hiện thực lớp Business Logic đòi hỏi bạn phải nắm rõ các business logic của ứng dụng. Ví dụ đối với

ứng dụng tin tức của chúng ta thì khi tạo một chuyên mục mới, bạn phải kiểm tra xem KeyName của

chuyên mục đó đã có trong hệ thống chưa? Nếu có rồi thì phải báo lỗi, và nếu chưa có thì chúng ta

kiểm tra KeyNameđó có hợp lệ hay không? (Chỉ chứa kí tự alphabet, chữ số, gạch dưới và gạch

ngang…).
public static void CreateCategory(Category category)

{

// Has this key name existed?

if (!CheckKey(category.KeyName))

throw newBusinessException(String.Format(Resources.Strings.KeyNameExisted,

category.KeyName));

// is this key name valid?

if (!ValidateKey(category.KeyName))

throw newBusinessException(String.Format(Resources.Strings.InvalidKeyName,

category.KeyName));

// ok , now save it to database

CategoryDAO categoryDAO = new CategoryDAO();

categoryDAO.CreateCategory(category);

}

Más contenido relacionado

Similar a 3 lop

Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaANHMATTROI
 
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...MasterCode.vn
 
Trong bài viết hôm nay
Trong bài viết hôm nayTrong bài viết hôm nay
Trong bài viết hôm nayledoanduc
 
Android Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content ProviderAndroid Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content ProviderPhuoc Nguyen
 
Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Hiển Phùng
 
Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...
Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...
Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...MasterCode.vn
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Minh Tri Lam
 
MVC
MVCMVC
MVCtkot
 
Thuc thi menh lenh voi co so du lieu
Thuc thi menh lenh voi co so du lieuThuc thi menh lenh voi co so du lieu
Thuc thi menh lenh voi co so du lieutruong le hung
 
Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)khanhtoankmz
 
Asp.net mvc framework qua cac vi du
Asp.net mvc framework  qua cac vi duAsp.net mvc framework  qua cac vi du
Asp.net mvc framework qua cac vi duKim Hyun Hai
 

Similar a 3 lop (20)

Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong java
 
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
 
3250
32503250
3250
 
Trong bài viết hôm nay
Trong bài viết hôm nayTrong bài viết hôm nay
Trong bài viết hôm nay
 
Asp.net 3.5 _7
Asp.net 3.5 _7Asp.net 3.5 _7
Asp.net 3.5 _7
 
Aspnet 3.5 _02
Aspnet 3.5 _02Aspnet 3.5 _02
Aspnet 3.5 _02
 
C5. Model, DataSharing.pdf
C5. Model, DataSharing.pdfC5. Model, DataSharing.pdf
C5. Model, DataSharing.pdf
 
Yii
YiiYii
Yii
 
Aspnet 3.5 _04
Aspnet 3.5 _04Aspnet 3.5 _04
Aspnet 3.5 _04
 
Android Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content ProviderAndroid Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content Provider
 
Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1
 
Ch06
Ch06Ch06
Ch06
 
Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...
Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...
Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...
 
Ung dung web chuong 6
Ung dung web  chuong 6Ung dung web  chuong 6
Ung dung web chuong 6
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
 
MVC
MVCMVC
MVC
 
Thuc thi menh lenh voi co so du lieu
Thuc thi menh lenh voi co so du lieuThuc thi menh lenh voi co so du lieu
Thuc thi menh lenh voi co so du lieu
 
Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)
 
Asp.net mvc framework qua cac vi du
Asp.net mvc framework  qua cac vi duAsp.net mvc framework  qua cac vi du
Asp.net mvc framework qua cac vi du
 
Cach su dung data reader
Cach su dung data readerCach su dung data reader
Cach su dung data reader
 

3 lop

  • 1. Hiện thực lớp Business Logic & Data Access Sau khi đã xong bước thiết kế, chúng ta sẽ tiến hành hiện thực 2 lớp Business và Data Access. Các bạn có thể xem source code đính kèm để biết chi tiết cách hiện thực 2 lớp này như thế nào. Lớp Presentation sẽ được thiết kế và hiện thực trong bài viết tiếp theo. Phần bên dưới tôi sẽ trình bày một số điểm chính trong cách hiện thực. Hiện thực Data Access Components Do ứng dụng của chúng ta đơn giản nên được giới hạn sẽ dùng với CSDL SQL Server 2000/2005 nên lớp này không được thiết kế để chạy cùng lúc với nhiều loại database khác nhau. Chúng ta sẽ dùng cái Stored Procedures để truy xuất dữ liệu an toàn và dễ thay đổi hơn, tránh bị các lỗi như SQL Injection(không thể tránh hoàn toàn nếu bạn không hiện thực đúng). Các bạn có thể xem qua một cách hiện thực một hàm cơ bản như thế nào: public void CreateCategory(Category category) { using (SqlConnection connection = GetConnection()) { SqlCommand command = new SqlCommand(“spCategoriesCreate”, connection); command.CommandType = CommandType.StoredProcedure; command.Parameters.Add(new SqlParameter(“@KeyName”, category.KeyName)); command.Parameters.Add(new SqlParameter(“@Name”, category.Name)); command.Parameters.Add(new SqlParameter(“@Description”, category.Description)); command.Parameters.Add(new SqlParameter(“@Picture”, category.Picture)); SqlParameter paramCategoryId = new SqlParameter(“@CategoryId”, SqlDbType.Int, 4); paramCategoryId.Direction = ParameterDirection.Output; command.Parameters.Add(paramCategoryId); connection.Open(); command.ExecuteNonQuery(); if (paramCategoryId.Value != DBNull.Value) category.CategoryId = (int)paramCategoryId.Value; else throw newDataAccessException(String.Format(Resources.Strings.CreateEntityException,“Categor y”));
  • 2. } } Stored Procedure spCategoriesCreate đơn giản được viết như sau: CREATE PROCEDURE dbo.spCategoriesCreate @Name nvarchar(50), @KeyName varchar(30), @Description ntext, @Picture varchar(256), @CategoryId int output AS INSERT INTO Categories ( Name, KeyName, Description, Picture ) VALUES ( @Name, @KeyName, @Description, @Picture ) SELECT @CategoryId = SCOPE_IDENTITY() Hiện thực lớp Business Logic Hiện thực lớp Business Logic đòi hỏi bạn phải nắm rõ các business logic của ứng dụng. Ví dụ đối với ứng dụng tin tức của chúng ta thì khi tạo một chuyên mục mới, bạn phải kiểm tra xem KeyName của chuyên mục đó đã có trong hệ thống chưa? Nếu có rồi thì phải báo lỗi, và nếu chưa có thì chúng ta kiểm tra KeyNameđó có hợp lệ hay không? (Chỉ chứa kí tự alphabet, chữ số, gạch dưới và gạch ngang…).
  • 3. public static void CreateCategory(Category category) { // Has this key name existed? if (!CheckKey(category.KeyName)) throw newBusinessException(String.Format(Resources.Strings.KeyNameExisted, category.KeyName)); // is this key name valid? if (!ValidateKey(category.KeyName)) throw newBusinessException(String.Format(Resources.Strings.InvalidKeyName, category.KeyName)); // ok , now save it to database CategoryDAO categoryDAO = new CategoryDAO(); categoryDAO.CreateCategory(category); }