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.