Bookmark not defined.. Bookmark not defined.. Bookmark not defined.. Bookmark not defined.. Bookmark not defined.. T ng Windows application và Web application ASP.NET bao g m Web Forms
Trang 1TP HCM, Tháng 1/2006
Trang 2H U
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 mt 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 tit 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 tit 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
Trang 3H U
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
Trang 4H U
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.
Trang 5H U
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.
Trang 6H U
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.
Trang 7
Lnh 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ã ngun đ 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
Trang 8d 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
Trang 92.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à mt 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
Trang 10H U
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:
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 trin 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 đó
Trang 11H U
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
Trang 12Hì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à mt mô hình m i dùng đ truy c p và x lý d li u
Trang 13H U
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, hu 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à mt 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
Trang 14b 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
Trang 15m 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
Trang 16B 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
Ph ng th c
LoadViewState
Trang 17ph 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
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
Trang 18Save 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
Gi i phóng ngu n tài nguyên
Nh ng control nói chung đ u đ c
Trang 19H U
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
Trang 20Hì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
Trang 21H U
2.3 Ngôn ng l p trình web laszlo
Laszlo là mt 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
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
Trang 22The OpenLaszlo Compiler biên dch 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
Trang 23Logging 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 gm 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
Trang 25M 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 chui đá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>
Trang 26private System.ComponentModel.Container components = null ; public [!output SAFE_CLASS_NAME]()
{
InitializeComponent();
} private void InitializeComponent() {
this Size = new System.Drawing.Size(300,300);
this Text = "[!output SAFE_CLASS_NAME]";
} }
}
Trong th i gian th c thi, ng d ng s l y thông tin g m tên c a namespace và tên
l p thay vào chu i đánh d u
this Size = new System.Drawing.Size(300,300);
this Text = "Samples";
} }
}
Trang 27Sinh mã ngu n trang Code-behind
Nh cách trình bày bên trên, vic t o m t trang code-behind m i cho trang aspx khá đ n gi n, ch c n đ c t p tin m u lên và thay th b ng các giá tr mà ng i dùng nh p vào
Tuy nhiên, sau khi đã t o đ c m t trang code -behind m i, v n đ đ t ra là khi
mu n thêm các khai báo bi n, thêm ph ng th c, s ki n… t đ ng vào mã ngu n thì nên thêm vào v trí nào c a t p tin Gi i pháp lúc này là c n ph i chia mã ngu n thành nhi u ph n b ng các chu i đánh d u Khi mu n thêm m t y u t nào
đó vào mã ngu n, ta d a theo nh ng chu i đánh d u này đ xác đ n h v trí chính xác
//End Using Statements
//Forms Definition @1-D8FD3E8D
public class NewPage1Page : System.Web.UI.Page
{
//End Forms Definition
//Forms Objects @1-7DB1BCE4
protected System.Web.UI.WebControls.Literal Label1;
protected System.Web.UI.WebControls.Literal Label2;
//End Forms Objects
//Page_Load Event @1-55207E05
private void Page_Load( object sender, System.EventArgs e) {
//End Page_Load Event
Trang 28}
//End Page_Load Event BeforeIsPostBack
//Page_Load Event tail @1-FCB6E20C
//End Page class tail
Trong đo n mã trên nh ng ta th y m i m t ph n đ c đánh d u b ng m t c p chu i ghi chú Ví d nh ph n khai báo các control trong giao di n (field) đ c đánh d u b ng m t c p chu i “Forms Objects” và “End Forms Objects” nh sau:
//Forms Objects @1-7DB1BCE4
protected System.Web.UI.WebControls.Literal Label1;
protected System.Web.UI.WebControls.Literal Label2;
//End Forms Objects
Nh v y d a vào c p chu i đánh d u mà ta có th thêm vào các khai báo bi n,
ph ng th c, s ki n… vào mã ngu n
Sinh mã ngu n cho trang aspx
ây là m u HTML c a trang aspx, ngôn ng C#, nh ng chu i đánh d u đ c in
đ m Khi t o m t trang aspx m i, nh ng chu i đánh d u s đ c thay b ng n i dung t ng ng
<%@ Page language="c#" Codebehind="$FILENAME$.cs"
AutoEventWireup="false" Inherits="$INHERITS$" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>
<head>
Trang 29H U
<title>[!output SAFE_ITEM_NAME]</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <meta name="CODE_LANGUAGE" Content="C#">
<meta name=vs_defaultClientScript content="[!output
DEFAULT_CLIENT_SCRIPT]">
<meta name=vs_targetSchema content="[!output
DEFAULT_TARGET_SCHEMA]">
</head>
<body MS_POSITIONING="[!output DEFAULT_HTML_LAYOUT]">
<form id="Form1" method="post" runat="server">
</form>
</body>
<html>
th là JavaScript hay VBScript
http://schemas.microsoft.com/inte llisense/ie3-2nav3-0
http://schemas.microsoft.com/inte llisense/ie5
http://schemas.microsoft.com/inte llisense/nav4-0.
Trang 30B ng 2 Chu i đánh d u trang aspx m u
N u chú ý thì ta th y c u trúc m t t p tin aspx c ng g n gi ng nh c u trúc t p tin xml Do v y, thêm m t thành ph n nào đó (ch ng h n nh button) vào trang aspx
c ng gi ng nh thêm m t ph n t trong t p tin xml Nh ng ph n t này đ c bi u
di n b ng m t c p th (ví d nh <asp:button> </asp:button>) và ph i n m trong
c p <form> </form>
Vì th , sinh mã ngu n cho trang aspx có th x lý nh khi t o ra m t t p tin xml
có ch a nh ng ph n t là các thành ph n c a trang web (bao g m các web control, html control, data control…)
Trong ph n sinh mã ngu n trang Code-behind
Do n i dung các t p tin m u t nh nên ch áp d ng cho m t đ i t ng c th m t ngôn ng c th Vì v y, n u ng d ng h tr nhi u ngôn ng khác nhau, thì ph i
t o ra nh ng m u đ c vi t nh ng ngôn ng l p trình khác nhau cho cùng m t
lo i đ i t ng Ch ng h n nh đ sinh m t trang code-behind trang web
Trang 31S d ng các chu i đánh d u trong mã ngu n làm cho mã ngu n r m rà, khó
mã ngu n cho ch ng trình M c đích c a công c này là làm gi m c c nh c c a
vi c vi t mã ngu n b ng tay cho các l p trình viên B ng cách s d ng namespace System.CodeDom đ c cung c p s n trong NET Framework, l p trình viên có th
t mình t o ra m t công c sinh mã ngu n t đ ng theo yêu c u riêng c a mình
Tóm t t khái ni m c u trúc cây d li u (Tree Data Structures)
C u trúc này đ c s d ng ph bi n khi bi u di n d li u M t cây bao g m nhi u
nút đ c liên k t v i nhau, t o ra m t c u trúc l u tr trong b nh
Hình minh h a c u trúc cây:
Trang 32H U
Hình 5 C u trúc cây Nút g c:
Hình 6 C u trúc cây – Nút g c Nút con:
Hình 7 C u trúc cây – Nút con
Trang 33H U
C u trúc cây là khái ni m quan tr ng đ c s d ng trong CodeDOM M i m t đ i
t ng trong mã ngu n đ c bi u di n nh m t nút c a cây
Kh o sát mã ngu n (C#) quen thu c nh sau:
Trang 34private System.Windows.Forms.Button button1;
private System.ComponentModel.Container components = null ;
private int _numOfStep;
{ return this _numOfStep;}
public virtual int NumOfStep
Trang 35câu l nh là CodeStatement, khai báo các bi n c a l p là CodeMemeberField, …
C u trúc đ th CodeDOM có th đ c minh h a nh sau:
Trang 36H U
Sinh mã ngu n trang Code-behind
sinh mã ngu n cho trang Code-behind, ta c n t o m t đ th CodeDOM và s
d ng hai namespace sau:
System.CodeDomđ nh ngh a các ki u (type) dùng đ trình bày c u trúc logic c a
mã ngu n, không ph thu c m t ngôn ng l p trình c th nào
System.CodeDom.Compiler đ c s d ng đ sinh ra mã ngu n t đ th CodeDOM và biên dch mã ngu n (h tr các ngôn ng C#, JScript, Vb.NET)
G c c a đ th CodeDOM là CodeCompileUnit, bi u di n cho m t project hay
m t assembly T t c m i thành ph n mã ngu n khác đ u ph i đ c liên k t v i nhau và có g c chung là CodeCompileUnit
Minh h a cách s d ng CodeDOM đ sinh mã ngu n:
CodeNamespace samplesNamespace = new CodeNamespace("SamplesNamespace");
//Nút con namespace đ c thêm vào g c
unit.Namespaces.Add(codeUsing);
unit.Namespaces.Add(samplesNamespace);
//Thêm l p vào namespace
Trang 37//Thêm khai báo bi n vào l p
CodeMemberField button = new
CodeMemberField( typeof (System.Windows.Forms.Button), "button1");
//Thêm ph ng th c InitializeComponent vào l p
CodeMemberMethod initMethod = new CodeMemberMethod();
CodeDomProvider provider;
if (language == "CSHARP")
provider = new CSharpCodeProvider();
else if (language == "VBNET")
Trang 38H U
provider = new VBCodeProvider();
StringWriter sw = new StringWriter();
ICodeGenerator generator= provider.CreateGenerator();
{ } }
Trang 39H U
Inherits System.Windows.Forms.Form
Private button1 As System.Windows.Forms.Button
Public Sub New ()
D a vào c u trúc cây đ phát sinh mã ngu n, vì v y mã ngu n đ c sinh ra có
th b t kì m t ngôn ng nào (C#, VB.NET…) n u ngôn ng này có h tr đ c t CodeDOM
Các ch ng trình đ c t o ra, biên d ch và th c thi đ ng th i gian ch y
Cho phép bi u di n c u trúc mã ngu n trong b nh b ng mô hình các đ i t ng
đ c l p v i ngôn ng l p trình
Trong t ng lai, có th m ra kh n ng “d ch” mã ngu n đ c vi t b ng ngôn
ng này sang ngôn ng khác (Ch ng h n mã ngu n vi t b ng C# đ c “d ch” ra thành d ng vi t b ng VB.NET)
H n ch
Ch a h tr nh ng tr ng h p sau:
1
Trang 40using MyAlias = MyNamespace.MyClass;
public void MyClass2 : MyAlias