L p trình h ng đ i t ng v i ướ ượ
mô hình 3 l p (3 layers)
Trong bài viết này không có tham vng trình bày li chi tiết mô hình thiết kế ng dng đa lp/tng
là như thế nào. Ch tóm tt ngn gn li nhng đim chính ca mô hình 3 lp, mà c th là 3 lp
logic.
Lưu ý: Các bn không nên nhm ln khái nim lp(layer) trong phn này vi khái nim lp(class)
ca các ngôn ng lp trình hướng đối tượng.
Trong phát trin ng dng, để d qun lý các thành phn ca h thng, cũng như không b nh
hưởng bi các thay đổi, người ta hay nhóm các thành phn có cùng chc năng li vi nhau và
phân chia trách nhim cho tng nhóm để công vic không b chng chéo và nh hưởng ln nhau.
Ví d trong mt công ty bn có tng phòng ban, mi phòng ban s chu trách nhim mt công
vic c th nào đó, phòng này không được can thip vào công vic ni b ca phòng kia như
Phòng tài chính thì ch phát lương, còn chuyn ly tin đâu phát cho các anh phòng Marketing thì
các anh không cn biết. Trong phát trin phn mm, người ta cũng áp dng cách phân chia chc
năng này. Bn s nghe nói đến thut ng kiến trúc đa tng/nhiu lp, mi lp s thc hin mt
chc năng nào đó, trong đó mô hình 3 lp là ph biến nht. 3 lp này là gì?
Là Presentation, Business Logic, và Data Access. Các lp này s giao tiếp vi nhau thông
qua các dch v(services) mà mi lp cung cp để to nên ng dng, lp này cũng không cn biết
bên trong lp kia làm gì mà ch cn biết lp kia cung cp dch v gì cho mình và s dng nó mà
thôi.
Mô hình 3 lp mà Microsoft đề ngh bn có th tham kho chi tiết các đề ngh thiết kế các thành
phn trong các lp này như thế nào đây:
http://www.microsoft.com/Downloads/details.aspx?familyid=A08E4A09-7AE3-4942-B466-
CC778A3BAB34&displaylang=en
Presentation Layer
Lp này làm nhim v giao tiếp vi người dùng cui để thu thp d liu và hin th kết qu/d liu
thông qua các thành phn trong giao din người s dng. Lp này s s dng các dch v do lp
Business Logic cung cp. Trong .NET thì bn có th dùng Windows
Forms, ASP.NET hay Mobile Forms để hin thc lp này.
Trong lp này có 2 thành phn chính là User Interface Components và User Interface
Process Components.
UI Components là nhng phn t chu trách nhim thu thp và hin th thông tin cho người dùng
cui. Trong ASP.NET thì nhng thành phn này có th là các TextBox, các Button, DataGrid…
UI Process Components: là thành phn chu trách nhim qun lý các qui trình chuyn đổi gia
các UI Components. Ví d chu trách nhim qun lý các màn hình nhp d liu trong mt lot các
thao tác định trước như các bước trong mt Wizard
Lưu ý : lp này không nên s dng trc tiếp các dch v ca lp Data Access mà nên s dng
thông qua các dch v ca lp Business Logic vì khi bn s dng trc tiếp như vy, bn có th b
qua các ràng buc, các logic nghip v mà ng dng cn phi có.
Business Logic Layer
Lp này thc hin các nghip v chính ca h thng, s dng các dch v do lpData
Access cung cp, và cung cp các dch v cho lp Presentation. Lp này cũng có th s dng
các dch v ca các nhà cung cp th 3 (3rd parties) để thc hin công vic ca mình(ví d như
s dng dch v ca các cng thanh tóan trc tuyến như VeriSign, Paypal…).
Trong lp này có các thành phn chính là Business Components, Business
Entities và Service Interface.
Service Interface là giao din lp trình mà lp này cung cp cho lpPresentation s dng.
Lp Presentation ch cn biết các dch v thông qua giao din này mà không cn phi quan tâm
đến bên trong lp này được hin thc như thế nào.
Business Entities là nhng thc th mô t nhng đối tượng thông tin mà h thng x lý. Trong
ng dng chúng ta các đối tượng này là các chuyên mc(Category) và bn tin(News). Các
business entities này cũng được dùng để trao đổi thông tin gia lp Presentation và lp Data
Access.
Business Components là nhng thành phn chính thc hin các dch v màService
Interface cung cp, chu trách nhim kim tra các ràng buc logic(constraints), các qui tc nghip
v(business rules), s dng các dch v bên ngoài khác để thc hin các yêu cu ca ng dng.
Trong ng dng ca chúng ta, lp này s cha các thành phn
làCategoryService và NewsService làm nhim v cung cp các dch v qun lý chuyên mc và
các bn tin (thêm, xóa, sa, xem chi tiết, ly danh sách…).
Data Access Layer
Lp này thc hin các nghip v liên quan đến lưu tr và truy xut d liu ca ng dng. Thường
lp này s s dng các dch v ca các h qun tr cơ s d liu như SQL Server, Oracle,… để
thc hin nhim v ca mình. Trong lp này có các thành phn chính là Data Access
Logic, Data Sources, Servive Agents).
Data Access Logic components (DALC) là thành phn chính chu trách nhim lưu tr vào và
truy xut d liu t các ngun d liu – Data Sources như RDMBS, XML, File systems….
Trong .NET Các DALC này thường được hin thc bng cách s dng thư vin ADO.NET để giao
tiếp vi các h cơ s d liu hoc s dng các O/R Mapping Frameworks để thc hin vic ánh
x các đi tượng trong b nh thành d liu lưu tr trong CSDL. Chúng ta s tìm hiu các thư vin
O/R Mapping này trong mt bài viết khác.
Service Agents là nhng thành phn tr giúp vic truy xut các dch v bên ngòai mt cách d
dàng và đơn gin như truy xut các dch v ni ti.
Chúng ta đã tìm hiu qua các lp ca mô hình 3 lp. Lý thuyết hơi nhiu mt chút có th làm bn
khó hiu vì kh năng trình bày có hn, nên bây gi th tìm hiu mt qui trình c th hơn để biết
các lp này giao tiếp vi nhau như thế nào. Ví d trong ng dng ca chúng ta có thao tác to
mt chuyên mc mi, thì các lp s ltương tác vi nhau như sau:
Lp Presentation
- Trình bày mt web form, có các text box cho phép người s dng nhp tên và mô t cho chuyên
mc
- Khi người dùng nhn nút to trên form này, ng dng s thc hin vic to mt Business
Entity Category mi như đon code sau minh ha:
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);
}
Lp Business Logic
Để cung cp dch v to mt chuyên mc, thành phn CategoryService s cung cp 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 tran 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 iy vào CSDL ư
CategoryDAO categoryDAO = new CategoryDAO();
categoryDAO.CreateCategory(category);
}
Lp Data Access
Tương t, để cung cp dch v lưu mt chuyên mc mi vào CSDL, thành phnCategoryDAO s
cung cp hàm sau (s dng ADO.NET để kết ni vi CSDL):
public void CreateCategory(Category category)
{
// t o connection
// t o command, kh i t oc 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 dng ca chúng ta s viết bng ASP.NET 2.0 và SQL Server 2000/2005. Ngôn ng được
dùng là C#.
Chúng ta đã tìm hiu qua các thành phn chính trong mô hình 3 lp, gi đến lúc bt tay vào thiết
kế các thành phn đó cho ng dng tin tc ca chúng ta. Trong ng dng tin tc mà chúng ta đã
tìm hiu yêu cu qua bài viết trước, chúng ta thy có hai đối tượng thông tin chính mà chúng ta
cn qun lý là các chuyên mc(category) và tin tc(news). ng dng qun lý ca chúng ta s thu
thp nhng đối tượng d liu này t người dùng(phóng viên, biên tp viên) và trình bày li cho
người s dng khác xem(độc gi). Gi chúng ta bt tay vào thiết kế các thành phn Business
Entities.
Business Entities
ng dng ca chúng ta s bao gm 2 entity chính là Category và News.
Trước hết là Category. Mt chuyên mc (Category) s gm nhng thông tin sau:
CategoryId: Mã chuyên mc – s được sinh t động khi to mi
Name: Tên chuyên mc. VD: Vi tính, Kinh tế
KeyName: Tên gi nh dùng để phân bit chuyên mc vi nhau (không được trùng nhau). VD vi
VNExpress bn s thy có Vi-tinh, Suc-khoe
Description: Mô t cho chuyên mc. VD: Description cho Vi-tinh là: thông tin mi nht v công
ngh thông tin ca Vit Nam và thế gii…
Picture: Hình nh đại din cho chuyên mc
Trong ng dng đơn gin này, chúng ta ch thiết kế chuyên mc có mt cp, không có các
chuyên mc con, cháu… Và ng dng này cũng không có phn qun lý các nhà biên tp viên,