Hi n th c l p Business Logic đòi h i b n ph i n m các business logic c a ng d ng. d
đ i v i ng d ng tin t c c a chúng ta tkhi 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 đó đã trong h th ng ch a? N u r i t ph i báo l i, n u ư ế ế
ch a tchúng ta ki m tra KeyName đó h p l hay không? (Ch ch a kí t alphabet, chư
s , g ch d i 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ùng ch c năng l i v i nhau ưở ườ
phân chia trách nhi m cho t ng nhóm đ công vi c không b ch ng chéo nh h ng l n ưở
nhau. d trong m t công ty b n 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 t 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 đó hình 3 l p ph bi n nh t. 3 l p này gì? ế
Presentation, Business Logic, 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 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 2 thành ph n chính User Interface Components 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 th các TextBox, các Button, DataGrid...
UI Process Components: là thành ph n ch u trách nhi m qu n các qui trình chuy n đ i gi a
các UI Components. d ch u trách nhi m qu n 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 nên s d ngư ế
thông qua các d ch v c a l p Business Logic khi b n s d ng tr c ti p nh v y, b n th ế ư
b qua các ràng bu c, các logic nghi p v 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,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 thành ph n chính Business Components, Business Entities Service
Interface.
Service Interface giao di n l p trình 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 nh ng th c th t nh ng đ i t ng thông tin h th ng x lý. Trong ượ
ng d ng chúng ta các đ i t ng này các chuyên m c(Category) 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 l p Dataượ
Access.
Business Components nh ng thành ph n chính th c hi n các d ch v 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
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 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 thành ph n chính 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 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 đ 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 hình 3 l p. thuy t h i nhi u m t chút th làm ế ơ
b n khó hi ukh 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 thao tácế ế ư ế
t o m t chuyên m c m i, t 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 text box cho phép ng i s d ng nh p tên 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 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 thi t kế ế
ng d ng c a chúng ta s vi t b ng ASP.NET 2.0 SQL Server 2000/2005. Ngôn ng đ c ế ượ
dùng 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 chúng taế
đã tìm hi u yêu c u qua bài vi t tr c, chúng ta th yhai đ 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) 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 Category News.
Tr c h t Category. M t chuyên m c (Category) s g m nh ng thông tin sau:ướ ế
CategoryId: 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 Vi-tinh, Suc-khoe...
Description: 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 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 m t c p, không các ơ ế ế
chuyên m c con, cháu... ng d ng này cũng không ph n qu n các nhà biên t p viên,
nhà báoc 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 News. M i m t b n tin s các thông tin sau:ế
NewsId: 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 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 g trung bình c a b n tin
Status: Tr ng thái hi n t i c a b n tin. th 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 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 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 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 th dùng trên l p Presentation đ ki m tra thông báo l i cho ng i dùng khi h nh p ườ
m t tên khóa đã trong h th ng