Tải bản đầy đủ (.pdf) (111 trang)

sinh source code theo giao diện tự động

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.57 MB, 111 trang )

HUTECH
B GIÁO DC VÀ ÀO TO
TRNG I HC DÂN LP K THUT CÔNG NGH
KHOA CÔNG NGH THÔNG TIN
B MÔN: CÔNG NGH PHN MM
oOo








LUN VN TT NGHIP


SINH SOURCE CODE THEO GIAO DIN
T NG






GVHD: ThS Lê Trung Hiu
H Nguyn Lê Hoàng Duy
SVTH:
Võ Nh Phng – 10102127
Nguyn Hoàng Quang – 10102137
Nguyn Ngc Phng Tho – 10102172







TP HCM, Tháng 1/2006

HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Lp Công Ngh Phn Mm
TÓM TT NI DUNG
Nhim v ca lun vn này là cung cp nhng gii pháp khác nhau và chn mt
gii pháp đ hin thc ng dng cho phép ngi dùng thit k giao din web bng
ngôn ng ASP.NET, Laszlo và sinh mã ngun t đng cho trang Code-behind.
Trong lun vn này, chúng tôi s trình bày nhng phn chính sau:
Chng 1 Yêu cu thc tin ca vic xây dng mt ng dng sinh mã ngun t
đng theo giao din.
Chng 2 Các kin thc c s phc v cho ng dng. Nhng hiu bit v ngôn
ng lp trình ASP.NET rt cn thit trong vic xây dng ng dng. Ngoài ra,
chúng tôi còn trình bày mt ngôn ng lp trình web mi là Laszlo, d kin s làm
hng phát trin tng lai cho ng dng.
Chng 3 Trình bày chi tit các gii pháp kh thi đc dùng đ xây dng ng
dng, bao gm s dng mu qui đnh sn và k thut CodeDOM.
Chng 4 Trình bày chi tit thit k và cài đt chng trình sinh mã ngun t
đng theo giao din, các kt qu đt đc.
Chng 5 ánh giá kt qu đt đc ca chng trình so vi mc tiêu ban đu và
hng phát trin ca đ tài này.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Lp Công Ngh Phn Mm

LI CM N
 có th hoàn thành tt lun vn này, chúng tôi đã đc s hng dn, ch bo
ca quý thy cô khoa Công Ngh Thông Tin trng i Hc Dân lp K Thut
Công Ngh, đc bit là thy Lê Trung Hiu. Chúng tôi cng rt cm n công ty
Tân Thiên Niên K đã to mi điu kin tt nht giúp đ chúng tôi trong quá trình
thc hin lun vn. Chúng tôi cng gi li cm n chân thành đn anh H Nguyn
Lê Hoàng Duy, nhân viên công ty Tân Thiên Niên K, vì s quan tâm hng dn
ca anh trong thi gian chúng tôi thc hin đ tài này.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Lp Công Ngh Phn Mm
MC LC
Chng 1 Error! Bookmark not defined.
PHÁT BIU VN  Error! Bookmark not defined.
1.1 Tip cn đ tài Error! Bookmark not defined.
1.2 Ni dung đ tài Error! Bookmark not defined.
Chng 2 Error! Bookmark not defined.
C S KIN THC Error! Bookmark not defined.
2.1 Áp dng lp trình hng đi tng trên môi trng .NET

Error! Bookmark not
defined.
2.2 Ngôn ng lp trình web ASP.NET Error! Bookmark not defined.
2.1.1 Gii thiu Error! Bookmark not defined.
2.1.1.1 Cu trúc ASP.NET
Error! Bookmark not defined.
2.1.1.2. Các thành phn c bn ca ASP.NET
Error! Bookmark not defined.
2.1.1.3. Chu kì sng ca trang
Error! Bookmark not defined.

2.1.2 Hot đng
Error! Bookmark not defined.
2.2.3 Các chun trong ASP.NET
Error! Bookmark not defined.
2.3 Ngôn ng lp trình web laszlo Error! Bookmark not defined.
Cu trúc ca OpenLaszlo: Error! Bookmark not defined.
2.3.1 OpenLaszlo Compiler
Error! Bookmark not defined.
2.3.2 OpenLaszlo Servlet
Error! Bookmark not defined.
2.3.3 OpenLaszlo Runtime Framework Library
Error! Bookmark not defined.
Chng 3 Error! Bookmark not defined.
CÁC GII PHÁP HIN THC NG DNG Error! Bookmark not defined.
3.1 S dng các mu qui đnh sn đ sinh mã ngun (template)

Error! Bookmark
not defined.
3.1.1 Gii thiu Error! Bookmark not defined.
3.1.2 S dng gii pháp cho ng dng
Error! Bookmark not defined.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Lp Công Ngh Phn Mm
3.1.3 ánh giá gii pháp Error! Bookmark not defined.
3.2 Dùng k thut CodeDOM đ sinh mã ngun Error! Bookmark not defined.
3.2.1 Gii thiu Error! Bookmark not defined.
3.2.2 S dng CodeDOM
Error! Bookmark not defined.
3.2.3 ánh giá gii pháp

Error! Bookmark not defined.
3.3 Chn gii pháp sinh mã ngun t đng Error! Bookmark not defined.
3.4 K thut phi màu các controls dùng Cascading Style Sheets (CSS)

Error!
Bookmark not defined.
3.5. Trình duyt Web trong ng dng Error! Bookmark not defined.
3.5.1 Gii thiu Error! Bookmark not defined.
3.5.2 ng dng ActiveX Control vào ng dng VS.NET
Error! Bookmark not defined.
3.5.3 Hin thc trong ng dng
Error! Bookmark not defined.
Chng 4 Error! Bookmark not defined.
THIT K VÀ CÀI T CHNG TRÌNH Error! Bookmark not defined.
4.1 Mô hình use case Error! Bookmark not defined.
4.2 c t Use case: Error! Bookmark not defined.
4.2.1 Use case Start up: Error! Bookmark not defined.
4.2.2 Use case Add Diagram
Error! Bookmark not defined.
4.2.3 Use case Add Connection
Error! Bookmark not defined.
4.2.4 Use case Edit Connection
Error! Bookmark not defined.
4.2.5 Use case Rename Connection
Error! Bookmark not defined.
4.2.6 Use case Publish
Error! Bookmark not defined.
4.2.7 Use case Browse Page (Publish page)
Error! Bookmark not defined.
4.2.8 Use case Add Form Control

Error! Bookmark not defined.
4.2.9 Use case Add Builder Control
Error! Bookmark not defined.
4.2.10 Use case Add File
Error! Bookmark not defined.
4.2.11 Use case Generate Code
Error! Bookmark not defined.
4.3 S đ lp Error! Bookmark not defined.
4.3.1 Package Project Error! Bookmark not defined.
4.3.2 Package MainTab
Error! Bookmark not defined.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Lp Công Ngh Phn Mm
4.3.3 Package Controls Error! Bookmark not defined.
4.3.4 Package CCGWizardClasses
Error! Bookmark not defined.
4.4 S đ thành phn Error! Bookmark not defined.
4.5 Thit k màn hình giao din Error! Bookmark not defined.
4.5.1 Màn hình chính: Error! Bookmark not defined.
4.5.1.1 Command Area
Error! Bookmark not defined.
4.5.1.2 ProjectExplorer
Error! Bookmark not defined.
4.5.1 3 PropertyGrid
Error! Bookmark not defined.
4.5.1.4 ToolBox
Error! Bookmark not defined.
4.5.1.5 Design Area
Error! Bookmark not defined.

4.5.1.6 Message explorer
Error! Bookmark not defined.
4.5.1.7 Language editor
Error! Bookmark not defined.
4.5.2 Phn giao din wizard databinding:
Error! Bookmark not defined.
Chng 5 Error! Bookmark not defined.
ÁNH GIÁ VÀ HNG PHÁT TRIN Error! Bookmark not defined.
5.1 ánh giá kt qu đt đc Error! Bookmark not defined.
5.2 i chiu vi mc tiêu đ ra Error! Bookmark not defined.
5.3 Hng phát trin Error! Bookmark not defined.



HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 1 of 80
Chng 1
PHÁT BIU VN 
1.1 Tip cn đ tài

Lnh vc công nghip phn mm  nc ta đang phát trin nhanh chóng. iu này
đt ra mt nhu cu to ln trong vic xây dng nhng ng dng có cht lng cao,
cung cp nhng sn phm phn mm nhm đáp ng kp thi nhu cu thc tin.
Nhng ng dng có qui mô ln, đc phát trin trong thi gian dài s đòi hi rt
nhiu thi gian và công sc ca các lp trình viên khi hin thc. iu này d dn
đn nhng sai sót trong quá trình xây dng và phát trin ng dng. Ngoài ra,
lng mã ngun quá ln gây nên tình trng khó qun lý, rt khó khn khi cn xem
li mã ngun đ kim tra, sa li…
Nh vy, vn đ đt ra là bng cách nào gim bt s vt v cho các lp trình viên

khi vit mã ngun bng tay, đng thi mã ngun phi rõ ràng, tuân theo mt chun
nht đnh đ d đc, d hiu, thun tin cho vic kim tra, chnh sa.
Ý tng xây dng mt phn mm cho phép ngi dùng ch cn thit k giao din
và mã ngun đc phát sinh t đng xut phát t nhng yêu cu thit thc nói
trên.
1.2 Ni dung đ tài

Hin nay đã có mt s phn mm h tr ngi dùng thit k giao din trc quan
và t đng sinh mã ngun nh: Microsoft Visual Studio .NET, CodeCharge
Studio, và phn mm mã ngun m nh SharpDevelop.
Trong lun vn này chúng tôi đ cp đn các phng pháp xây dng ng dng cho
phép ngi dùng thit k giao din web và phát sinh mã ngun t đng.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 2 of 80
Ni dung đc trình bày trong đ tài này bao gm các kin thc v ngôn ng lp
trình web ASP.NET, Laszlo. Nhng kin thc này là nn tng đ xây dng ng
dng. Ngoài ra cng trình bày chi tit các gii pháp k thut sinh mã ngun t
đng cùng mt s k thut b tr, phân tích nhng thun li và hn ch ca tng
k thut khi áp dng vào chng trình. Trong lun vn này chúng tôi s dng k
thut dùng mu (Template) và dùng CodeDOM đ sinh mã ngun cho trang
ASP.NET. Chúng tôi s xây dng mt chng trình cho phép ngi s dng thit
k web trc quan bng cách kéo th control vào màn hình thit k, mã HTML và
Code-behind s do chng trình t đng phát sinh. Chng trình h tr tng tác
vi c s d liu. Bt kì thi đim nào ngi dùng cng có th to kt ni đn c
s d liu và thao tác trên d liu.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 3 of 80
Chng 2

C S KIN THC
2.1 Áp dng lp trình hng đi tng trên môi trng .NET

Lp trình hng đi tng là khái nim rt quen thuc đi vi ngi lp trình và
đc s dng rng rãi do nhng u đim ca nó.  tìm hiu k hn v khái nim
này, chúng tôi đã đính kèm tài liu có trình bày chi tit vn đ này. Trong phm vi
lun vn chúng tôi ch đ cp mt s đim khác bit ca lp trình hng đi tng
trên môi trng .NET.
c đim 1:
Trong .NET không có hàm hu nhng khi khai báo mt phng thc
ging nh hàm hu ví d ~Employee() thì vn hp l. Tht ra v bn cht thì cách
khai báo nh vy có ý ngha hoàn toàn khác nhau trong 2 ngôn ng:
+ trong C++, đó là hàm hu.
+ trong C#, đó là mt cách đ dùng phng thc System.Object.Finalize() mà s
đc gi khi b phn nht rác t đng sp hu đi tng.
c đim 2
. Mt lp cha trong .NET là lp s đc các lp khác tha k, lp này
đc nhn bit bi t khóa virtual hoc abstract:
+ t khóa virtual đ ch mt lp mà bn đc phép tao mt đi tng ca nó.
+ t khóa abstract là mt lp tru tng mà không th đc khI to.
VD: lp cha Employee() va hai lp k tha là FullTimeEmp() và PartTimeEmp().
Nu dung virtual thì bn vn có th to đi tng ca Employee() nhng trên thc
t bt k nhân viên nào cng thuc FullTimeEmp() hoc PartTimeEmp(). Do đó
d ngn vic khi to này, bn dùng t khoá abstract.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 4 of 80
c đim 3: Không còn dùng t khoá friend, và thay vào đó là internal đ cp
quyn truy xut cho các lp trong cùng chng trình hin hành.
c đim 4:

T khoá base đ gi hàm dng ca lp cha:
Ví d:
class Employee
{
String Name;
public Employee(string sName)
{
Name=sName;
}
}
class PartTimeEmp
{
private int m_HoursOfWork=0;
public PartTimeEmp(String sName,int h) : base(sName)
{
m_HoursOfWork=h;
}
}
2.2 Ngôn ng lp trình web ASP.NET
2.1.1 Gii thiu
ASP.NET không ch là phiên bn k tip ca ASP (Active Server Page), nó đa ra
mô hình phát trin web thng nht bao gm nhiu dch v h tr đ ngi lp
trình xây dng nhng ng dng web mnh. ASP.NET cung cp b th vin gm
nhiu lp đc thit k đ x lý các yêu cu HTTP (HTTP request). Ngoài b th
vin này, ASP.NET còn bao gm nhiu thành phn IIS dùng đ qun lý các yêu
cu đó.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 5 of 80
Nhng u đim ca ASP.NET

S tách bit mã ngun và HTML Vi ASP.NET, ta có th hoàn toàn tách bit
gia vic thit k và x lý các s kin. iu này giúp mt nhóm phát trin web
gm các nhà lp trình và nhng nhà thit k d dàng kt hp vi nhau tht hiu
qu.
ASP.NET là ngôn ng hng đi tng Mi yêu cu (request) gi ti ng dng
ASP.NET đu đc mt lp (hin thc interface IHttpHandler) x lý. iu này
giúp d dàng m rng khi mun phát trin thêm.
Tn dng đc các dch v h tr bi môi trng .NET Môi trng .NET
Framework cung cp sn nhng th vin đ s dng cho ng dng web.
Qun lý trng thái Cung cp gii pháp qun lý trng thái ca session và ng dng.
Chng hn nh thông tin trng thái có th đc gi trong b nh hoc lu tr
trong c s d liu. Nó cng có th đc chia s qua các web-form. Nhng thông
tin này có th đc phc hi, thm chí ngay c khi máy ch b hn g hay b ngt
kt ni.
Cp nht các tp tin trong khi máy ch vn đang chy Nhng thành phn trong
ng dng vn có th đc cp nht trong khi máy ch đang trc tuyn và các máy
khách đang kt ni đn. Framework s s dng nhng tp tin mi ngay khi chúng
đc sao chép vào ng dng. Nhng tp tin c vn còn đc lu gi trong b nh
cho đn khi nhng máy khách kt thúc.
Nhng tp tin cu hình dng XML Các thit lp cu hình trong ASP.NET đu
đc lu  dng các tp tin XML rt d đc và sa cho phù hp. Ngoài ra ta có th
chép nhng tp tin này cùng vi các tp tin khác ca ng dng vào máy ch khác.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 6 of 80
2.1.1.1 Cu trúc ASP.NET
Cu trúc ASP.NET da trên nn tng cu trúc ca .NET Framework. Visual studio
đa ra mt cách thc thng nht nhm kt hp nhiu tính nng khác nhau.

Hình 1 Cu trúc Visual Studio .NET


Gii thích cu trúc Visual Studio .NET
Tng Common Language Runtime (CLR) CLR có nhim v ti và thc thi mã
ngun. CLR có nhim v qun lý mã ngun ti thi đim thc thi, đng thi đm
bo s bo mt. Tóm ti, qun lý mã ngun là mt yu t c bn ca CLR. Mã
ngun đn CLR gi là mã ngun đc qun lý, ngc li mã ngun không đn
CLR gi là mã ngun không đc qun lý.
Tng Base Classes .NET Framework cung cp rt nhiu b th vin, bao gm các
lp c s (Base Classes) , nh nhng lp thao tác v mng, nhng lp làm vic
vi d liu, … Tt c nhng b th vin này đc Services Framework cung cp,
và nó nm  v trí ngay trên CLR (Xem hình v).
Tng ADO.NET ADO.NET là mô hình Microsoft’s ActiveX Data Object (ADO).
ADO.NET không đn gin là vic chuyn t mô hình ADO qua môi trng .NET,
mà nó hoàn toàn là mt mô hình mi dùng đ truy cp và x lý d liu.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 7 of 80
ADO.NET đc bit dùng đ phát trin nhng ng dng web. Có th nhn thy
điu này qua hai yu t sau:
• Disconnected Datasets Trong ADO.NET, hu ht vic x lý d liu đc thc
hin bên ngoài kt ni đang m (open connection)
• Trao đi d liu d dàng  dng XML Datasets có th đc chuyn thành đnh
dng ph bin trên Web là XML.
Tng Windows application và Web application ASP.NET bao gm Web Forms
và Web Services. ASP.NET đc xây dng t nhiu Web Forms vi các control
ca nó to nên giao din cho trang web. Nhng control này đc khai báo trong
trang aspx di dng th HTML. Web Services cung cp gii pháp kt ni nhiu
ng dng khác nhau thông qua internet.
Tng Common Language Specification Nhng đc tính ca môi trng .NET là
s hp nht ca nhng ngôn ng lp trình khác nhau.  đt đc điu đó, có mt

s lut đc áp dng và mi ngôn ng phi tuân theo các lut trên. Common
Language Specification là mt tp hp bao gm các qui lut và nhng ràng buc
mà mi ngôn ng phi tuân theo
Nhng ngôn ng tng thích vi .NET: VB.NET, C#, Managed C++ và
JScript.NET.
2.1.1.2. Các thành phn c bn ca ASP.NET
XML Web Services
Mt XML Web service là mt component mà có th đc gi thông qua giao thc
mng TCP/IP bi nhng ng dng khác. Nó thc thi mt phng thc xác đnh –
mi th t nhng tính toán t đn gin đn phc tp – và tr v nhng giá tr gi
ng dng.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 8 of 80
Nhng gì XML Web Services có th làm duy nht là chúng có th gi qua Web.
XML Web Service đc thc thi s dng yêu cu HTML và SOAP và thay đi d
liu vi nhng components khác dùng XML.
Mt XML Web service h tr truy xut phng thc server t xa. Dùng XML
Web services, cho phép thay đi d liu gia các mng client -server hay server-
server, s dng các chun ging HTTP và XML chuyn tin nhn đa d liu qua
firewalls. Vi nhng ng dng XML Web services, ngi lp trình có th vit vi
bt k ngôn ng nào, dùng bt k component model nào, và chy trên mi h điu
hành đu có th truy cp XML Web services.
Các đ án ng dng Web ASP.NET và s trin khai (ASP.Net Web
Application Projects and Deloyment):
Khi bn to mt đ án ng dng Web, nó có to mt file Web.config cha các
đnh dng và nhng chuyn đi ca các file cu hình .NET. Trong ASP.NET, file
cu hình cho phép bn thit lp các thip lp xác đnh ca đ án cho vic bo mt,
nhng tùy chn biên dch, x lý li, …
Web Forms và ASP.NET Page Framework

Web Forms cho phép ngi lp trình xây dng mt cách mnh m nhng trang
Web trên nn Forms. Khi to nhng trang này, bo có th dùng ASP.NET server
controls nhng thành phn UI chung, và lp trình chúng bng nhng tasks ph
bin.
Bn có th to các trang HTML và các trang Web Forms nh giao din ngi
dùng cho ng dng ca mình. Các trang HTML đc phát sinh s dng ni dung
tnh. Trong khi đó, các trang Web Forms cho bn mt giao din lp trình làm vic
ging nh mt dng Visual Basic, và giao din đc hin th bi mt trình duyt
Web hay thit b Web khác.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 9 of 80
Các trang Web Forms đc to trên nn ASP.NET Framework. Mi trang Web
Form là mt đi tng mà chit xut t lp ASP.NET Page, mà hot đng nh
mt container cho controls. Mi trang có hai file: mt file .aspx cha các thành
phn giao din và mt file lp cha mã chy trang, đc gi là code-behind.
ng dng Web truy xut d liu:
Hu ht các ng dng Web ASP.NET thc hin ít nht mt s mc truy cp d
liu. ASP.NET không truy xut trc tip d liu. Thay vào đó, nhng ng dng
Web dùng b truy xut d liu ADO.NET.
ADO.NET h tr mt nn hoàn chnh cho truy xut và qun lý d liu t nhiu
ngun, gm c các c s d liu và các file XML hay các stream. ADO.NET có
b Providers – các lp cho phép bn kt ni ngun d liu, thc thi câu lnh, và
đc kt qu. Bn có th đ d liu vào dataset, mà khi không còn kt ni, nó vn
nm trong memory cache.
C s h tng ng dng Web: S Bo mt (Security), S Thc Thi
(Performance), Theo Vt (Tracing)
Bo mt
Bo mt làm mt phn không th thiu trong ng dng ca bn. Nhng ng dng
Web bng đnh ngha cho phép ngi dùng truy cp đn tài nguyên trung tâm –

the Web Server – và thông qua nó, đn nhiu database servers. Làm vic vi
nhng yêu cu bo mt, có hai khái nim:
Authentication: xác nhn nhng ngi dùng, nhng ngi có quyn truy cp.
Authorization: là tin trình ca vic chp thun hay t chi truy cp đn tài nguyên
đi vi nhng ngi dùng xác đnh.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 10 of 80
Hn na Windows cng h tr mt h thng bo mt khá chc chn cho phép
ngi qun tr to nhng tài khon ngi dùng và cp quuyn cho nhng ngi
này truy cp d liu.
S thc thi
Bn có th thit lp s thc thi ng dng ca bn bng vic cache các trang và d
liu. ASP.NET cha mt cache xut mà lu nhng trang đc yêu cu trc đó.
Bng vic xác đnh các thit lp cache, bn có th kim soát đ dài ca các trang
đc cache và đc làm ti.
Theo vt
Bi vì nhng ng dng Web chy trên Server – thng là mt server t xa. Do đó,
ASP.NET cho phép bn gp thông tin theo vt mt cách trc tip trong mt trang
Web Forms.
2.1.1.3. Chu kì sng ca trang
Khi có mt yêu cu (request) gi đn máy ch (gi s trang đc yêu cu ln đu
tiên), máy ch s x lý mt lot các bc sau:
Giai đon Mô t Phng thc hay
s kin cn
override
Khi to đi tng

Các control nm trong web-form
và đi tng Page đc khi to

thông qua phng thc OnInit().
Nhng đi tng này s đc
dùng trong sut thi gian sng
(lifetime) ca yêu cu (request).
Init (OnInit)
Ti viewstate
(LoadViewState)
Sau khi hàm OnInit() đc gi,
các control có th đc gi thông
qua ID ca nó. Trong s kin
LoadViewState, property
Phng thc
LoadViewState
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 11 of 80
ViewState ca mi control t đng
đc gán giá tr. Ngi dùng có
th hin thc phng thc
LoadViewState đ tùy chnh s
phc hi trng thái.
X lý d liu tr v
(postback data)
X lý nhng d liu đc tr v t
webform và cp nht các giá tr
property phù hp.
Chú ý: Ch nhng control có x lý
d liu tr v mi tham gia giai
đon này.
Phng thc

LoadPostData

Load
Thc thi các tác v ph bin trong
hu ht các yêu cu (requests),
chng hn nh thit lp câu truy
vn c s d liu. Ti thi đim
này, nhng server control đc
khi to, trng thái đc phc hi,
và nhng form control hin th d
liu bên phía client.
Load (OnLoad)
Gi thông báo thay
đi postback
Bt nhng s kin thay đi đ đáp
ng s thay đi trng thái gia
postback hin ti và postback
trc.
Chú ý: Ch có nhng control nào
bt s kin thay đi postback mi
tham gia giai đon này.
Phng thc
RaisePostData_
ChangedEvent

X lý postback.
X lý s kin phía client to
postback và bt nhng s kin
tng ng trên server.
Chú ý: Ch có nhng control nào

bt s kin thay đi postback mi
tham gia giai đon này.
Phng thc
RaisePostBackEvent

Prerender
Cp nht trc khi kt qu đc
tr cho client. Bt kì s thay đi
nào v trng thái ca control trong
PreRender
(OnPreRender)
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 12 of 80
giai đon này s đc lu li,
trong khi đó nhng thay đi trong
giai đon render s b mt.
Save state
Lu trng thái
Property ViewState ca mt
control s t đng đc lu thành
mt đi tng kiu chui sau giai
đon này. i tng chui này s
đc gi đn cho client và đóng
vai trò nh mt bin n.  tng
hiu qu, mt control có th
override phng thc
SaveViewState đ chnh sa
property ViewState.
Phng thc

SaveViewState
Render
Sinh ra kt qu đ tr v cho
server.
Phng thc
Render
Dispose
Gii phóng đi tng. Nhng
tham chiu đn các ngun tài
nguyên chim dng nhiu b nh
s đc gii phóng. (chng hn
nh kt ni c s d liu).
Phng thc
Dispose
Unload
Gii phóng ngun tài nguyên.
Nhng control nói chung đu đc
dn dp trong Dispose và s ko x
lý s kin này.
UnLoad
(OnUnLoad)
Bng 1 Chu kì sng ca trangASP.NET
2.1.2 Hot đng
Nhn request và x lý request

Chu kì sng ca mt ASP.NET request
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 13 of 80


Hình 2 Chu kì sng ca mt ASP.NET request

Trong hình minh ha trên, ta thy ASP.NET bao gm nhiu thành phn IIS dùng
đ qun lý các request. Trong đó có ISAPI DLL tên ASPNET_ISAPI.DLL và
worker process tên ASPNET_WP.EXE. ASP.NET cài đt các s đ trong IIS, đ
chuyn các yêu cu trang ASPX, ASCX, ASHX, và ASMX cho
ASPNET_ISAPI.DLL. T đây, ASPNET_ISAPI.DLL chuyn request đn
ASPNET_WP.EXE, ti đây ASP.NET s ti các lp (class) cn thit đ đáp ng
request.
Nguyên lý hot đng ca các trang ASP.NET Web Form


Hình 3 Cu trúc Web Forms Page và lp c s Page

HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 14 of 80
Các file lp code -behind ca tt c các trang Web Forms trong mt đ án đc
phiên dch vào trong đ án bng file th vin liên kt đng .dll (dynamic -link
library). Trang .aspx cng đc biên dch, nhng có mt s đim khác.

Hình 4 Hai tp tin ca Web Form Page

Ln đu tiên mt ngi dùng duyt đn trang .aspx, ASP.NET t đng sinh ra mt
file lp .NET yêu cu trang, và biên dch nó đn mt file .dll th hai. Lp đc
sinh ra cho trang .aspx tha k t lp code-behind mà đã đc biên dch vào trong
file .dll ca đ án. Khi mt ngi dùng yêu c u trang Web theo giao thc URL,
nhng file .dll chy trên server và x lý đng xut ra trang HTML.
2.2.3 Các chun trong ASP.NET
Bt kì ngôn ng nào cng đu phi đa ra mt chun chung cho phn code ca

mình, và ASP.NET cng không ngoi l, cn phi có mt chun riêng nhm thun
tin trong vic thông nht code, đa code trong ASP.NET tr nên trong sáng, d
hiu hn, thun tin trong vic sa cha, bo trì sau này. ng thi đa ngi lp
trình Web lên bt chuyên nghip hn, vì vy mt chun ASP.NET là cn thit đa
ra. Chng hn v chun đt tên, cách t chc n i dung file, cách ghi chú thích
trang nh th nào, cách đt danh h iu cho các hng, các bin, các đi tng ra
sao….Các chun này s đc trình bày chi tit trong phn tài liu đính kèm.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 15 of 80
2.3 Ngôn ng lp trình web laszlo
Laszlo là mt nn ngôn ng lp trình Web đc
phát trin bi h thng Laszlo. Nó là mt k thut
mi, mc dù đã trin khai t nm 2001, nhng mãi
đn nm 2004 mi thc s tr thành ngôn ng ph
bin.
Hin ti, Laszlo vn đang đc phát trin và ci thin ngày này qua ngày khác bi
Laszlo System.
Laszlo là ngôn ng da trên nn XML, cho phép bn trin khai nhng ng dng
dùng các ngôn ng chun XML, JavaScript, và Xpath.
Laszlo module có th đc tích hp vi dng trang Web mt cách d dàng. Trang
Web có th tng tác vi file Laszlo bng vic truyn nhng tham s đn file .lzx.
File .lzx cng có th làm đc điu này bng cách s dng JavaScript.
Laszlo đc xây dng cho phát trin ng dng web. ng dng laszlo đc to nên
da trên vn bn ta text XML kèm JavaScript, h tr phát trin các chun hng
đi tng, biu din d liu, giao din thông minh và sinh đng.
Phát trin ng dng tiên tin: có kh nng tích hp cao trong lp trình XML.
Mô hình lp trình mnh m : vi nhng th m rng và tha k đy đ các đc
tính u vit ca ngôn ng hng đi tng
Mc đ chun hóa cao vi tính nng này tuy công ngh laszlo phát tr in mi cho

th h web hin đi nhng đi vi ngi lp trình s làm quen nhanh chóng da
trên các k nng sn có vi HTML và JavaScript.
Phn này ch gii thiu tng quan v cu trúc ca Laszlo, phn chi tit s đc
trình bày trong tài liu đính kèm.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 16 of 80
Cu trúc ca OpenLaszlo:
2.3.1 OpenLaszlo Compiler
The OpenLaszlo Compiler biên dch nhng file ngun LZX vào tro ng th vin
thc thi cho mc tiêu môi trng thi gian chy.
Compiler h tr hai đc tính sau:
XML UI Compilation.
S din t giao din ngi dùng LZX là mt din t khai báo XML ca mt giao
din ng dng. Trình biên dch chuyn đi nhng din gii XML này sang
bytecode mà to mt giao diên úng dng khi ng dng đc thc thi.
ECMAScript: Compilation
Các lp và các th hin giao din ngi dùng LZX đc chú thích vi nhng
phng thc và các s lý s kin ECMAScript, tng t DHTML. Trình biên dch
chuyn đi sang dng bytecode.
Media, data, và Font Compilation
Chuyn code PNG, JPG, GIF, SWF, MP3, và các file ch, sang các file đi tng
ng dng.
2.3.2 OpenLaszlo Servlet
Servlet h tr cho các thuc tính sau:
Media trancoding Chuyn mã mt dng media vào trong mt tp mà trình chy
Flash 6 và Flash 7 có th hin th.
Data transcoding Chuyn mã các response d liu XML sang mt đnh dng nhi
phân.
HUTECH

Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 17 of 80
Caching a vào cache nhng kt qu ca các yêu cu đn media và d liu
servers.
Proxying Các yêu cu prox y đn media và server d liu t xa, dùng mt
whiteList hay BlackList server-side.
XML Services H tr phn hi (back-end) cho các yêu cu SOAP, XML -RPC, và
JavaRPC.
Logging and Administration Mt s qun lý nhm kim soát và khai báo giao din
ngi dùng cho phép s kim tra giao din và vn bn ca trng thái server.
2.3.3 OpenLaszlo Runtime Framework Library
The OpenLaszlo Runtime Framework Library bao gm các components ca giao
din ngi dùng, data binding, và các dch v mng.
Nó h tr các đc đim sau:
Components Mt th vin đy tin ích ca nhng thành phn giao din ngi
dùng, gm c nhng thành phn Web form và cu hình grid và cây, cho phép bn
ly prototype mt cách nhanh chóng.
Layout Mt dng ca hin th qun lý v trí các thành phn giao din ngi dùng
mt cách t đng khi chúng thay đi kích thc.
Animation Mt h thng hình nh đng h tr khai báo hay x lý hình nh đng
cho tt c các yu t giao din ngi dùng.
Constraints (ép kiu) Mt khai báo ép kiu h thng t đng cp nht các thuc
tính giao din ngi dùng t nhng giá tr ca các tp d liu.
Data binding T đng đ vào các thành giao din ngi dùng nhng d liu t tp
d liu XML, và có th to nhiu phiên bn ca các thành phn mà ni kt vi
nhiu d liu.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 18 of 80
XML Services Nhng yêu cu HTTP cho các dch v XML, SOAP, XML-RPC, và

JavaRPC.
Debugging Mt trình debugger dòng lnh đc đính vào hin th nhng cnh báo
lúc thc thi chng trình và làm sáng t các biu thc ECMAScript trong ng
cnh ca ng dng.
HUTECH
Lun vn tt nghip Th.S Lê Trung Hiu – H Nguyn Lê Hoàng Duy
SV Khóa 2001 – Khoa Công Ngh Phn Mm Page 19 of 80
Chng 3
CÁC GII PHÁP HIN THC NG DNG
3.1 S dng các mu qui đnh sn đ sinh mã ngun (template)

3.1.1 Gii thiu
Mu qui đnh sn là các tp tin vi ni dung là mã ngun chun ca mt trang
window form, trang web, user control… Mã ngun này  dng mt ngôn ng nh t
đnh (C#, VB.NET…) và gn nh là mt mã ngun hoàn chnh.
Trong mt mu cn phân bit ni dung tnh và ni dung đng.
Ni dung tnh là ni dung bt bin. Ngha là bt kì mt đi tng nào cùng loi
(chng hn mt window form) cng đu phi có ni dung này, vì vy nó đc s
dng cho tt c nhng đi tng cùng loi.
Ni dung đng là ni dung s thay đi tùy thuc vào các giá tr mà ngi dùng
nhp vào. Ni dung này đc đánh du bng mt chui, gi là chui đánh du.
Các chui đánh du đc thay th bng ni dung đc mô t bi ngi dùng trong
thi gian thc thi.
 hiu rõ cách s dng mu đ sinh mã ngun t đng, ta xét mt ví d c th.
ây là mt mu window form (có lc b mt s dòng mã không có tác dng
minh ha), đc Microsoft Visual Studio s dng khi thêm mt window form mi
vào C# project Các chui đánh du trong mu đc in đm. Thông tin chính xác
s thay th các chui này và to ra mt mã ngun hoàn chnh cho window form.
using System;
using System.Windows.Forms;


namespace [!output SAFE_NAMESPACE_NAME]
{
/// <summary>

×