
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 new BusinessException(String.Format(Resources.Strings.KeyNameExisted,
category.KeyName));
// is this key name valid?
if (!ValidateKey(category.KeyName))
throw new BusinessException(String.Format(Resources.Strings.InvalidKeyName,
category.KeyName));
// ok , now save it to database
CategoryDAO categoryDAO = new CategoryDAO();
categoryDAO.CreateCategory(category);
}
Trong phát tri n ng d ng, đ d qu n lý các thành ph n c a h th ng, cũng nh không b nhể ứ ụ ể ễ ả ầ ủ ệ ố ư ị ả
h ng b i các thay đ i, ng i ta hay nhóm các thành ph n có cùng ch c năng l i v i nhau vàưở ở ổ ườ ầ ứ ạ ớ
phân chia trách nhi m cho t ng nhóm đ công vi c không b ch ng chéo và nh h ng l nệ ừ ể ệ ị ồ ả ưở ẫ
nhau. Ví d trong m t công ty b n có t ng phòng ban, m i phòng ban s ch u trách nhi m m tụ ộ ạ ừ ỗ ẽ ị ệ ộ
công vi c c th nào đó, phòng này không đ c can thi p vào công vi c n i b c a phòng kiaệ ụ ể ượ ệ ệ ộ ộ ủ
nh Phòng tài chính thì ch phát l ng, còn chuy n l y ti n đâu phát cho các anh phòngư ỉ ươ ệ ấ ề
Marketing thì các anh không c n bi t. Trong phát tri n ph n m m, ng i ta cũng áp d ng cáchầ ế ể ầ ề ườ ụ
phân chia ch c năng này. B n s nghe nói đ n thu t ng ki n trúc đa t ng/nhi u l p, m i l p sứ ạ ẽ ế ậ ữ ế ầ ề ớ ỗ ớ ẽ
th c hi n m t ch c năng nào đó, trong đó mô hình 3 l p là ph bi n nh t. 3 l p này là gì? Làự ệ ộ ứ ớ ổ ế ấ ớ
Presentation, Business Logic, và Data Access. Các l p này s giao ti p v i nhau thông qua cácớ ẽ ế ớ
d ch v (services) mà m i l p cung c p đ t o nên ng d ng, l p này cũng không c n bi t bênị ụ ỗ ớ ấ ể ạ ứ ụ ớ ầ ế
trong l p kia làm gì mà ch c n bi t l p kia cung c p d ch v gì cho mình và s d ng nó mà thôi.ớ ỉ ầ ế ớ ấ ị ụ ử ụ

L u ý: Các b n không nên nh m l n khái ni m l p(layer) trong ph n này v i khái ni mư ạ ầ ẫ ệ ớ ầ ớ ệ
l p(class) c a các ngôn ng l p trình h ng đ i t ng.ớ ủ ữ ậ ướ ố ượ
Presentation Layer
L p này làm nhi m v giao ti p v i ng i dùng cu i đ thu th p d li u và hi n th k t qu /dớ ệ ụ ế ớ ườ ố ể ậ ữ ệ ể ị ế ả ữ
li u thông qua các thành ph n trong giao di n ng i s d ng. L p này s s d ng các d ch vệ ầ ệ ườ ử ụ ớ ẽ ử ụ ị ụ
do l p Business Logic cung c p. Trong .NET thì b n có th dùng Windows Forms, ASP.NET hayớ ấ ạ ể
Mobile Forms đ hi n th c l p này.ể ệ ự ớ
Trong l p này có 2 thành ph n chính là User Interface Components và User Interface Processớ ầ
Components.
UI Components là nh ng ph n t ch u trách nhi m thu th p và hi n th thông tin cho ng i dùngữ ầ ử ị ệ ậ ể ị ườ
cu i. Trong ASP.NET thì nh ng thành ph n này có th là các TextBox, các Button, DataGrid...ố ữ ầ ể
UI Process Components: là thành ph n ch u trách nhi m qu n lý các qui trình chuy n đ i gi aầ ị ệ ả ể ổ ữ
các UI Components. Ví d ch u trách nhi m qu n lý các màn hình nh p d li u trong m t lo tụ ị ệ ả ậ ữ ệ ộ ạ
các thao tác đ nh tr c nh các b c trong m t Wizard... ị ướ ư ướ ộ
L u ý : l p này không nên s d ng tr c ti p các d ch v c a l p Data Access mà nên s d ngư ớ ử ụ ự ế ị ụ ủ ớ ử ụ
thông qua các d ch v c a l p Business Logic vì khi b n s d ng tr c ti p nh v y, b n có thị ụ ủ ớ ạ ử ụ ự ế ư ậ ạ ể
b qua các ràng bu c, các logic nghi p v mà ng d ng c n ph i có.ỏ ộ ệ ụ ứ ụ ầ ả

Business Logic Layer
L p này th c hi n các nghi p v chính c a h th ng, s d ng các d ch v do l p Data Accessớ ự ệ ệ ụ ủ ệ ố ử ụ ị ụ ớ
cung c p, và cung c p các d ch v cho l p Presentation. L p này cũng có th s d ng các d chấ ấ ị ụ ớ ớ ể ử ụ ị
v c a các nhà cung c p th 3 (3rd parties) đ th c hi n công vi c c a mình(ví d nh s d ngụ ủ ấ ứ ể ự ệ ệ ủ ụ ư ử ụ
d ch v c a các c ng thanh tóan tr c tuy n nh VeriSign, Paypal...).ị ụ ủ ổ ự ế ư
Trong l p này có các thành ph n chính là Business Components, Business Entities và Serviceớ ầ
Interface.
Service Interface là giao di n l p trình mà l p này cung c p cho l p Presentation s d ng. L pệ ậ ớ ấ ớ ử ụ ớ
Presentation ch c n bi t các d ch v thông qua giao di n này mà không c n ph i quan tâm đ nỉ ầ ế ị ụ ệ ầ ả ế
bên trong l p này đ c hi n th c nh th nào.ớ ượ ệ ự ư ế
Business Entities là nh ng th c th mô t nh ng đ i t ng thông tin mà h th ng x lý. Trongữ ự ể ả ữ ố ượ ệ ố ử
ng d ng chúng ta các đ i t ng này là các chuyên m c(Category) và b n tin(News). Cácứ ụ ố ượ ụ ả
business entities này cũng đ c dùng đ trao đ i thông tin gi a l p Presentation và l p Dataượ ể ổ ữ ớ ớ
Access.
Business Components là nh ng thành ph n chính th c hi n các d ch v mà Service Interfaceữ ầ ự ệ ị ụ
cung c p, ch u trách nhi m ki m tra các ràng bu c logic(constraints), các qui t c nghi pấ ị ệ ể ộ ắ ệ
v (business rules), s d ng các d ch v bên ngoài khác đ th c hi n các yêu c u c a ngụ ử ụ ị ụ ể ự ệ ầ ủ ứ
d ng.ụ
Trong ng d ng c a chúng ta, l p này s ch a các thành ph n là CategoryService vàứ ụ ủ ớ ẽ ứ ầ
NewsService làm nhi m v cung c p các d ch v qu n lý chuyên m c và các b n tin (thêm, xóa,ệ ụ ấ ị ụ ả ụ ả
s a, xem chi ti t, l y danh sách...). ử ế ấ
Data Access Layer
L p này th c hi n các nghi p v liên quan đ n l u tr và truy xu t d li u c a ng d ng.ớ ự ệ ệ ụ ế ư ữ ấ ữ ệ ủ ứ ụ
Th ng l p này s s d ng các d ch v c a các h qu n tr c s d li u nh SQL Server,ườ ớ ẽ ử ụ ị ụ ủ ệ ả ị ơ ở ữ ệ ư
Oracle,... đ th c hi n nhi m v c a mình. Trong l p này có các thành ph n chính là Dataể ự ệ ệ ụ ủ ớ ầ
Access Logic, Data Sources, Servive Agents).
Data Access Logic components (DALC) là thành ph n chính ch u trách nhi m l u tr vào và truyầ ị ệ ư ữ
xu t d li u t các ngu n d li u - Data Sources nh RDMBS, XML, File systems.... Trong .NETấ ữ ệ ừ ồ ữ ệ ư
Các DALC này th ng đ c hi n th c b ng cách s d ng th vi n ADO.NET đ giao ti p v iườ ượ ệ ự ằ ử ụ ư ệ ể ế ớ
các h c s d li u ho c s d ng các O/R Mapping Frameworks đ th c hi n vi c ánh x cácệ ơ ở ữ ệ ặ ử ụ ể ự ệ ệ ạ
đ i t ng trong b nh thành d li u l u tr trong CSDL. Chúng ta s tìm hi u các th vi n O/Rố ượ ộ ớ ữ ệ ư ữ ẽ ể ư ệ
Mapping này trong m t bài vi t khác.ộ ế
Service Agents là nh ng thành ph n tr giúp vi c truy xu t các d ch v bên ngòai m t cách dữ ầ ợ ệ ấ ị ụ ộ ễ
dàng và đ n gi n nh truy xu t các d ch v n i t i.ơ ả ư ấ ị ụ ộ ạ
Chúng ta đã tìm hi u qua các l p c a mô hình 3 l p. Lý thuy t h i nhi u m t chút có th làmể ớ ủ ớ ế ơ ề ộ ể
b n khó hi u vì kh năng trình bày có h n, nên bây gi th tìm hi u m t qui trình c th h n đạ ể ả ạ ờ ử ể ộ ụ ể ơ ể
bi t các l p này giao ti p v i nhau nh th nào. Ví d trong ng d ng c a chúng ta có thao tácế ớ ế ớ ư ế ụ ứ ụ ủ
t o m t chuyên m c m i, thì các l p s lt ng tác v i nhau nh sau:ạ ộ ụ ớ ớ ẽ ươ ớ ư
L p Presentationớ
- Trình bày m t web form, có các text box cho phép ng i s d ng nh p tên và mô t choộ ườ ử ụ ậ ả
chuyên m cụ
- Khi ng i dùng nh n nút t o trên form này, ng d ng s th c hi n vi c t o m t Businessườ ấ ạ ứ ụ ẽ ự ệ ệ ạ ộ
Entity Category m i nh đo n code sau minh h a:ớ ư ạ ọ

public void CreateNewCategory()
{
Category category = new Category();
category.Name = name.Text;
category.Description = description.Text;
// s d ng d ch v do l p Business cung c p đ t o chuyên m cử ụ ị ụ ớ ấ ể ạ ụ
CategoryService.CreateCategory(category);
}
L p Business Logicớ
Đ cung c p d ch v t o m t chuyên m c, thành ph n CategoryService s cung c p hàm sau:ể ấ ị ụ ạ ộ ụ ầ ẽ ấ
public static void CreateCategory(Category category)
{
// ki m tra xem tên khóa c a chuyên m c đã t n t i ch a?ể ủ ụ ồ ạ ư
...
// ki m tra tên khóa c a chuyên m c có h p l không?ể ủ ụ ợ ệ
...
// s d ng DV c a l p Data Access đ l u chuyên m c m i này vào CSDLử ụ ủ ớ ể ư ụ ớ
CategoryDAO categoryDAO = new CategoryDAO();
categoryDAO.CreateCategory(category);
}
L p Data Accessớ
T ng t , đ cung c p d ch v l u m t chuyên m c m i vào CSDL, thành ph n CategoryDAOươ ự ể ấ ị ụ ư ộ ụ ớ ầ
s cung c p hàm sau (s d ng ADO.NET đ k t n i v i CSDL):ẽ ấ ử ụ ể ế ố ớ
public void CreateCategory(Category category)
{
// t o connectionạ
...
// t o command, kh i t o các tham s ...ạ ở ạ ố
command.Parameters.Add(new SqlParameter("@KeyName", category.KeyName));
command.Parameters.Add(new SqlParameter("@Name", category.Name));
command.Parameters.Add(new SqlParameter("@Description", category.Description));
// l u d li uư ữ ệ
command.ExecuteNonQuery();
}
Phân tích và thi t kế ế
ng d ng c a chúng ta s vi t b ng ASP.NET 2.0 và SQL Server 2000/2005. Ngôn ng đ cỨ ụ ủ ẽ ế ằ ữ ượ
dùng là C#.
Chúng ta đã tìm hi u qua các thành ph n chính trong mô hình 3 l p, gi đ n lúc b t tay vào thi tể ầ ớ ờ ế ắ ế
k các thành ph n đó cho ng d ng tin t c c a chúng ta. Trong ng d ng tin t c mà chúng taế ầ ứ ụ ứ ủ ứ ụ ứ
đã tìm hi u yêu c u qua bài vi t tr c, chúng ta th y có hai đ i t ng thông tin chính mà chúngể ầ ế ướ ấ ố ượ
ta c n qu n lý là các chuyên m c(category) và tin t c(news). ng d ng qu n lý c a chúng ta sầ ả ụ ứ Ứ ụ ả ủ ẽ
thu th p nh ng đ i t ng d li u này t ng i dùng(phóng viên, biên t p viên) và trình bày l iậ ữ ố ượ ữ ệ ừ ườ ậ ạ
cho ng i s d ng khác xem(đ c gi ). Gi chúng ta b t tay vào thi t k các thành ph nườ ử ụ ộ ả ờ ắ ế ế ầ
Business Entities.
Business Entities

ng d ng c a chúng ta s bao g m 2 entity chính là Category và News.Ứ ụ ủ ẽ ồ
Tr c h t là Category. M t chuyên m c (Category) s g m nh ng thông tin sau:ướ ế ộ ụ ẽ ồ ữ
CategoryId: Mã chuyên m c - s đ c sinh t đ ng khi t o m iụ ẽ ượ ự ộ ạ ớ
Name: Tên chuyên m c. VD: Vi tính, Kinh t ...ụ ế
KeyName: Tên g i nh dùng đ phân bi t chuyên m c v i nhau (không đ c trùng nhau). VDợ ớ ể ệ ụ ớ ượ
v i VNExpress b n s th y có Vi-tinh, Suc-khoe...ớ ạ ẽ ấ
Description: Mô t cho chuyên m c. VD: Description cho Vi-tinh là: thông tin m i nh t v côngả ụ ớ ấ ề
ngh thông tin c a Vi t Nam và th gi i...ệ ủ ệ ế ớ
Picture: Hình nh đ i di n cho chuyên m cả ạ ệ ụ
Trong ng d ng đ n gi n này, chúng ta ch thi t k chuyên m c có m t c p, không có cácứ ụ ơ ả ỉ ế ế ụ ộ ấ
chuyên m c con, cháu... Và ng d ng này cũng không có ph n qu n lý các nhà biên t p viên,ụ ứ ụ ầ ả ậ
nhà báo và c ch c p quy n h n duy t bài, g i bài...Tôi dành ph n này cho các b n phát tri nơ ế ấ ề ạ ệ ử ầ ạ ể
thêm, nh ng tôi cũng s g i ý cho các b n cách thi t k trong ph n m r ng ng d ng.ư ẽ ợ ạ ế ế ầ ở ộ ứ ụ
Ti p theo là News. M i m t b n tin s có các thông tin sau:ế ỗ ộ ả ẽ
NewsId: mã b n tin. S đ c sinh t đ ng khi t o m i.ả ẽ ượ ự ộ ạ ớ
Title: tiêu đ chính c a b n tin. VD: Microsoft tuyên b phá s n!ề ủ ả ố ả
Subtitle: tiêu đ ph c a b n tin. VD: Bill Gates t ch c!ề ụ ủ ả ừ ứ
Excerpt: ph n gi i thi u ng n g n c a b n tinầ ớ ệ ắ ọ ủ ả
Authors: danh sách tác gi b n tin. VD: Nguy n Văn A, Hoàng Th Bả ả ễ ị
Keywords: danh sách t khóa chính trong b n tin dùng đ tìm ki m. VD: Microsoft, brokenừ ả ể ế
Body: Đây là ph n n i dung chính c a b n tin.ầ ộ ủ ả
Picture: Hình nh minh h a cho b n tin.ả ọ ả
CreationTime: Ngày gi t o b n tinờ ạ ả
LastModificationTime: Ngày gi ch nh s a cu i cùng c a b n tinờ ỉ ử ố ủ ả
PublishedTime: Ngày gi b n tin đ c đăngờ ả ượ
TotalViews: T ng s l t ng i xem b n tinổ ố ượ ườ ả
TotalRates: T ng s l t ng i đánh giá b n tinổ ố ượ ườ ả
Rate: Đi m đánh giá trung bình c a b n tinể ủ ả
Status: Tr ng thái hi n t i c a b n tin. Có th là Writting(Đang vi t), Approving(Đang chạ ệ ạ ủ ả ể ế ờ
duy t), Published(Đã đ c đăng) ệ ượ
Business Service Components
B c ti p theo chúng ta s phân tích và thi t k các Business Service Components. Các thànhướ ế ẽ ế ế
ph n này s làm nhi m v chính cung c p các d ch v cho l p Presentation dùng đ l y và l uầ ẽ ệ ụ ấ ị ụ ớ ể ấ ư
tr thông tin.ữ
L p CategoryServiceớ
Chúng ta c n nh ng thao tách chính trên đ i t ng d li u Category:ầ ữ ố ượ ữ ệ
T o m i - ạ ớ CreateCategory(Category category)
C p nh t - ậ ậ UpdateCategory(Category category)
Xóa - DeleteCategory(int categoryId)
L y thông tin chi ti t - ấ ế GetCategory(int categoryId)
L y danh sách các category - ấGetCategories()
Ki m tra m t Key xem có trong database ch a - CheckKey(string keyName). Thao tác này dùngể ộ ư
đ ki m tra xem khi t o m i m t category thì KeyName đã t n t i trong h th ng ch a. Thao tácể ể ạ ớ ộ ồ ạ ệ ố ư
này có th dùng trên l p Presentation đ ki m tra và thông báo l i cho ng i dùng khi h nh pể ớ ể ể ỗ ườ ọ ậ
m t tên khóa đã có trong h th ngộ ệ ố