You are on page 1of 11

[ASP.

NET] MVC Framework v v d minh ha


y l bi dch t mt s bi blog ca tc gi Scott Guthrie v ASP.NET MVC Framework v mt
cng ngh mi ra i ca ASP.NET.

Mt hn ch ca framework ASP.NET t trc n nay l khng h tr cc lp trnh vin s
dng kin trc MVC pht trin cc ng dng, v nhiu ngi vn ang mong ch s xut hin
ca kin trc lu nm ny trong b framework.

Model View Controller (MVC) l g

MCV l tn mt phng php chia nh mt ng dng thnh ba thnh phn ci t, mi thnh
phn ng mt vai tr khc nhau v nh hng ln nhau, l models, views, v controllers.
1. Models trong cc ng dng da trn MVC l nhng thnh phn c nhim v lu tr thng
tin, trng thi ca cc i tng, thng thng n l mt lp c nh x t mt bng trong
CSDL. Ly v d, chng ta c lp Product c s dng m t d liu t bng Products trong
SQL, bao gm ProductID, OrderDate
2. Cn i vi Views, n chnh l cc thnh phn chu trch nhim hin th cc thng tin ln
cho ngi dng thng qua giao din. Thng thng, cc thng tin cn hin th c ly t thnh
phn Models. V d, i tng Product c mt Edit view bao gm cc textboxes, cc
dropdowns v checkboxes chnh sa cc thuc tnh ca sn phm; c mt Display view gm
2 dng, ct dng l ProductID, dng sau l OrderDate xem thng tin v sn phm.
3. Cui cng, Controllers trong cc ng dng kiu MVC chu trch nhim x l cc tc ng
v mt giao din, cc thao tc i vi models, v cui cng l chn mt view thch hp hin
th ra mn hnh. Trong kin trc MVC, view ch c tc dng hin th giao din m thi, cn iu
kin dng nhp xut ca ngi dng vn do Controllers m trch.

Mt li im ca phng php MVC l n bt buc phi to ra mt s rnh mch trong lin kt
gia 3 thnh phn models, views v controllers trong ng dng. Duy tr c mi quan h rnh
mch r rng ny khin vic kim tra ng dng tr nn d dng hn, ng thi trch nhim ca
tng thnh phn c nh ngha r rng v c ba u lm vic n vi nhau.
Pattern MVC cng cho php thc hin red/green test driven development (TDD)
(http://en.wikipedia.org/wiki/Test-driven_development), ci t cc unit tests t ng, xc nh
v kim tra li cc yu cu trc khi bt tay vo vit code.
*** Test-Driven Development (TDD) is a software development technique consisting of short
iterations where new test cases covering the desired improvement or new functionality are
written first, then the production code necessary to pass the tests is implemented, and finally the
software is refactored to accommodate changes.
Mt vi chi tit m ti c th h l vo thi im hin ti, l:
- Cho php s chia tch rnh mch gia cc thnh phn, mi thnh phn u c kh nng c
test ring bit v mc nh h tr TDD. Tt c cc mi lin h chnh yu trong MVC u c giao
din hin th v u c th xy dng thnh cc m hnh, v bao gm interface-based
IHttpRequest/IHttpResponse. Bn c th chy unit test cho ng dng m khng phi chy cc
Controllers trong ASP.NET process, iu ny lm unit test chy nhanh hn. Bn c th s dng
unit testing framework no cng c, k c NUnit, MBUnit, MS Test
- c thit k c th d m rng v tin dng, tt c mi th trong MVC framework u c
th nhanh chng c thay i, ty chn ha. V d bn c th vit mt View v s dng cho
nhiu ng dng khc nhau, y l tnh pluggable.
- Bao gm thnh phn nh x URL cho php bn xy dng cc ng dng thn thin vi b my
tm kim v vi ngi dng. Ly v d ti c th nh x URL /products/edit/4 l mt trang cho
php chnh sa thng tin v cc sn phm, hoc l /Blogs/scottgu/10-10-2007/SomeTopic/
xem cc thng tin.
- MVC framework h tr s dng cc cc tp tin .ASPX, .ASCX v .Master nh l thnh phn
View, iu c ngha l bn vn c th s dng cc tnh nng ca ASP.NET nh master pages,
<%= %> snippets, server controls, templates, data-binding, localization Tuy nhin n khng
s dng m hnh post-back t giao din gi n server na, thay vo , bn c th ch ng
a nhng post-back t giao din n thng lp Controller. Tm li, khng cn viewstate
hay l page lifecycle cn tn ti trong m hnh MVC.
- Vn tip tc h tr cc tnh nng ASP.NET nh l forms/windows authentication, URL
authorization, membership/roles, output and data caching, session/profile state management,
health monitoring, configuration system, the provider architecture
Nu bn ang tm kim mt phng php xy dng cc ng dng web theo hng MVC, ti ngh
ASP.NET MVC Framework mi ra ny s l mt la chn tt, rt rnh mch v d s dng. N
cho php bn d dng bo tr s phn tch gia cc thnh phn trong ng dng, ng thi cng
rt tt trong cng vic testing v TDD.
Ti s vit nhiu bi hng dn hn trong nhng tun sp n m t cch thc lm vic ca
MVC, cho bn c th nhn ra nhng u im v thun li khi s dng cng ngh ny.
Mt ng dng ca hng thng mi in t n gin
Ti s s dng mt ng dng ca hng thng mi in t minh ha ci cch m ASP.NET
MVC Framework lm vic. Bi vit hm nay ti s ci t mt h thng lit k v tm duyt
cc sn phm c trong ca hng.
C th, chng ang ang xy dng h thng cho php ngi dng cui tm duyt danh sch cc
catalog khi h n thm trang /Products/Categories:

Khi ngi dng click vo mt ng link catalog nh hnh trn, h s c chuyn ti trang
hin th cc sn phm c trong mt danh mc c th, l trang /Products/List/CategoryName:

Khi ngi dng click vo mt sn phm, h c chuyn n trang m t thng tin chi tit v
sn phm , /Products/Detail/ProductID:

Chng ta s xy dng tt c cc tnh nng trn bng cch s dng ASP.NET MVC framework.
Xin nhc li mt ln na, s phn bit r rng gia cc thnh phn trong ng dng, kh nng
unit test v TDD l nhng iu to ra s khc bit m chng ta c bit nhn mnh.
To mi mt ng dng ASP.NET MVC
Visual Studio Project Templates c i km vi MVC Framework, cho php to mt ng
dng web theo template cho sn. n gin, bn ch cn vo File -> New Project v chn
template ASP.NET MVC Web Application v to mt web mi.
Mc nh khi s dng template ny, Visual Studio s to mt solution mi bao gm hai projects
con. Project u tin l web project ni m bn s ci t ng dng. Project th hai l testing
project m bn dng test project th nht:

Bn c th s dng bt k unit testing no, bao gm NUnit, MBUnit, MSTest, XUnit trong
ASP.NET MVC. Visual Studio 2008 ci t sn testing project h tr MSTest (trong VS
2005 ch c Visual Studio Team System SKU mi c), v testing project ny c t ng to
ra khi bn s dng template MVC project.
Trong tng lai chng ti cng s thm vo cc testing project dnh cho NUnit, MBUnit v cc
testing framework khc, cho bn c thm nhiu lu chn khi to mt ng dng web v c
ngay mt testing project m bn thch s dng.
Hiu r cu trc th mc trong Project
Cu trc th mc mc nh ca ng dng ASP.NET MVC gm 3 th mc chnh:
* /Controllers
* /Models
* /Views
Nh bn thy, chng ti khuyn khch vic a nhng class iu khin vo bn trong th mc
/Controllers, nhng class thuc v m hnh d liu vo bn trong th mc /Models, v nhng g
lin quan n giao din vo th mc /Views.
Mc d ASP.NET MVC framework khng bt buc bn phi lun s dng cu trc ny, nhng
y l cu trc mc nh khi bn to mt project mi v chng ti lun lun khuyn khch vic
s dng n phn chia ng dng. Bn hy s dng cu trc ny ngoi tr trng hp bn
ra mt l do thuyt phc thay i n.
nh x cc URL vo trong class Controller
Hu ht cc web framework, nh ASP, PHP, JSP, ASP.NET WebForms, u nh x cc URL
vo mt file template c lu trn a. Ly v d URL /Products.aspx hay /Products.php
c chuyn n file template Products.aspx hay Products.php trn a cng x l. Khi mt
ng dng web nhn c HTTP Request n web server, th web framework s chy on mt
code c th tng ng vi ni dung ca file template, v on code ny ng vai tr x l yu
cu do pha client gi n. Thng thng th on code ny s sinh ra HTML v p ng li pha
client.
MVC Framework li hot ng theo mt cch khc hon ton, thay v nh x cc URL vo cc
file template lu trn a, n s a thng vo cc class. Nhng class c nh x ti c gi l
Controllers, v chng s x l request n, kim sot dng nhp xut v giao din i vi
ngi dng, thc thi cc ng dng v data logic tng ng vi request. Cui cng, chng s
dng cc thnh phn Views to HTML v p tr li request.

ASP.NET MVC Framework c mt b my nh x URL tht s mnh m. B my ny cung cp
phng php rt linh hot trong vic nh x URLs sang cho Controller Classes. Bn c th d
dng nh ra cc quy lut, ci t ng i ASP.NET da vo cc quy lut ng i , xc
nh xem phi thc thi Controller no. ASP.NET cn c kh nng phn tch URL, chuyn cc
thng s trong URL thnh cc tham s trong li gi hm ca Controller. Ti s vit k hn v k
thut nh tuyn nng cao trong nhng bi blog sp n.
ng i mc nh t ASP.NET MVC URL n Controller Classes
Cc projects ASP.NET MVC c nh ngha sn mt s quy lut v ng i bn khng phi
hiu chnh thm iu g trong khi bt u lm quen vi framework mi. Bn c th bt u vit
m v s dng phng php nh x URL mc nh c nh ngha trong file Global.asax -
ASP.NET Application class. File Global.asax ny c t ng to ra t ASP.NET MVC project
template.
Phng php mc nh n gin lm nhim v nh x mt phn URL t HTTP Request, ly v
d /Products/, n mt class c tn theo mu UrlPathController, tc l URL /Products/ s c
chuyn n class c tn l ProductsController.
xy dng chc nng tm duyt sn phm trong ng dng thng mi in t, chng ta thm
vo class ProductsController vo project. Bn c th s dng menu Add New Item nhanh
chng to Controller class t template:

Class ProductsController c k tha t class c s System.Web.MVC.Controller. Tha k t
class c s ny khng phi l iu bt buc, tuy nhin s kh tin li bi n c nhiu phng
thc v chc nng m ta mun s dng v sau ny.

Mt khi chng ta nh ngha class ProductsController, ASP.NET MVC framework s s dng
n cho tt c cc URL bt u bng /Products/. ProductsController cng s c s dng bt
k khi no c yu cu n /Products/Categories, /Products/List/Beverages v
/Products/Detail/3, l ba chc nng m ta s phi ci t trong ng dng ca hng ny.
Trong phn tip theo ti s thm ShoppingCartController ngi dng c th qun l gi hng
ca h. Thm vo l AccountController cho php ngi dng to ti khon khch hng, ng
nhp v ng xut khi website. Tt nhin khi c hai controller ny ri, th mc nh cc URL
bt u bng /ShoppingCart/ v /Account/ s c t ng chuyn hng sang controller x
l.
Lu : ASP.NET MVC framework khng yu cu bn bt buc phi s dng cch t tn
nh x URL theo mu nh trn. L do duy nht m ng dng ti ang thc hin lm nh vy l
do n s dng cc lut nh x mc nh c to bi ASP.NET MVC Project template. Nu bn
mun thay i, bn c th chnh sa li cc lut trong class ASP.NET Application - file
Global.asax.

You might also like