Dựa trên kiến thức thu được khi phân tích Zend Framework, tác giả xâydựng PHP Framework thử nghiệm, và đưa ra kiến trúc của Framework thửnghiệm, với hệ thống thư mục và các thành phần tr
Trang 1ĐẶNG HẢI AN
XÂY DỰNG FRAMEWORK HỖ TRỢ LẬP TRÌNH WEB
LUẬN VĂN THẠC SĨNGÀNH: CÔNG NGHỆ THÔNG TIN
Hà Nội – 2015
Trang 2ĐẶNG HẢI AN
XÂY DỰNG FRAMEWORK HỖ TRỢ LẬP TRÌNH WEB
Chuyên ngành : Kỹ thuật phần mềm
LUẬN VĂN THẠC SĨ NGÀNH: CÔNG NGHỆ THÔNG TIN
NGƯỜI HƯỚNG DẪN KHOA HỌC: TS TRƯƠNG NINH THUẬN
Hà Nội - 2015
Trang 3Tôi cũng xin được bày tỏ lòng biết ơn tới các thầy cô trường Đại họcCông nghệ, Đại học Quốc gia Hà Nội đã tham gia giảng dạy và chia sẻ nhữngkinh nghiệm quý báu cho tập thể học viên trong khóa nói chung và cá nhân tôinói riêng Tôi xin cảm ơn tới các thầy và các anh chị đã thường xuyên giúp đỡ,trao đổi, góp ý về những vấn đề khoa học liên quan tới luận văn.
Trên tất cả, tôi xin gửi lời biết ơn tới bố mẹ, gia đình người thân Bố mẹ
đã phải làm việc vất vả tạo cơ hội và điều kiện thuận nhất giúp tôi toàn tâm toàn
ý thực hiện luận văn và chọn con đường đi
của mình Một lần nữa, tôi xin chân thành cảm
ơn!
Hà Nội, tháng 6 năm 2015
Học viên
Đặng Hải An
Trang 4LỜI CAM ĐOAN
Tôi xin cam đoan đây là công trình của riêng tôi Các số liệu, kết quả nêutrong Luận văn là vô cùng trung thực, và chưa ai công bố trong bất kỳ công trìnhnào khác
Tôi xin cam đoan các thông tin trích dẫn trong Luận văn đã được chỉ rõnguồn gốc
Học viên thực hiện Luận văn
ĐẶNG HẢI AN
Trang 5MỤC LỤC
LỜI CẢM ƠN
LỜI CAM ĐOAN
MỤC LỤC
Danh mục các ký hiệu và chữ viết tắt
Danh mục các bảng
Danh mục hình vẽ, đồ thị
MỞ ĐẦU
CHƯƠNG 1 TỔNG QUAN VỀ NỀN TẢNG HỖ TRỢ LẬP TRÌNH ỨNG DỤNG WEB (WEB APPLICATION FRAMEWORK)
1.1 Framework
1.2 Web Application Framework
1.3 PHP Framework
1.4 Mô hình Model - View - Controller (MVC)
1.4.1 Lịch sử mô hình MVC
1.4.2 Khái niệm mô hình MVC
1.4.3 Các thành phần trong Web Framework
1.4.3.1 Model
1.4.3.2 View
1.4.3.3 Controller
CHƯƠNG 2 XÂY DỰNG THỬ NGHIỆM FRAMEWORK BẰNG NGÔN NGỮ PHP
2.1 Tổng quan về một PHP Framework
2.2 Kiến trúc của Framework thử nghiệm
2.2.1 Tổng quát về hệ thống thư mục trong Framework thử nghiệm
2.2.2 Các thành phần trong Framework thử nghiệm
2.2.2.1 Quy trình xử lý yêu cầu
2.2.2.2 Các thành phần
2.2.2.3 Các khái niệm khi sử dụng framework thử nghiệm
2.3 Hệ thống các lớp thư viện và hàm hỗ trợ trong Framework thử nghiệm 34 2.3.1 Các lớp thư viện
2.3.1.1 Email (System/Lib/Email.php)
2.3.1.2 Database library (system/Database/mysql.php)
2.3.1.3 Pagination(System/Lib/Pagination.php)
2.3.1.4 Session class (System/Lib/Session.php)
2.3.1.5 Upload class (System/Lib/upload.php)
2.3.1.6 ExportDataExcel class (System/Lib/ExportDataExcel.php)
Trang 6SỬ DỤNG FRAMEWORK THỬ NGHIỆM
3.1.Giới thiệu về quy trình quản lý và sử dụng phòng thực hành
3.2 Phân tích nhu cầu
3.3.Thiết kế hệ thống
3.3.1 Biểu đồ Use Case
3.3.2 Biểu đồ chi tiết lớp
3.4.Ứng dụng quản lý phòng thực hành
KẾT LUẬN
TÀI LIỆU THAM KHẢO
Trang 8DANH MỤC CÁC BẢNG
Bảng 1.1 Vai trò hệ thống thư mục trong Framework thử nghiệm
Bảng 3.1 Danh mục Lớp, phòng ban
Bảng 3.2 Danh mục phòng thực hành
Bảng 3.3 Danh mục máy/thiết bị trong phòng thực hành
Bảng 3.4 Đăng ký phòng thực hành
Trang 9DANH MỤC HÌNH VẼ, ĐỒ THỊ
Hình 1.1 Mô hình MVC
Hình 1.2 Biểu đồ tuần tự một chuỗi MVC đơn giản
Hình 2.1 Mô hình Model – View – Controller trong Zend Framework
Hình 2.2 Cấu trúc thư mục của Zend Framework
Hình 2.3 Cấu trúc hệ thống thư mục Framework thử nghiệm
Hình 2.4 Quy trình xử lý một HTTP Request của Framework thử nghiệm
Hình 3.1 Biểu đồ Use Case các tác nhân và mối quan hệ giữa các tác nhân
Hình 3.2 Biểu đồ Use Case theo hướng chức năng của tác nhân Admin
Hình 3.3 Biểu đồ Use Case theo hướng chức năng của tác nhân Giảng viên
Hình 3.4 Biểu đồ Use Case theo hướng chức năng của tác nhân Sinh viên
Hình 3.5 Biểu đồ Use Case khi tích hợp hệ thống phụ
Hình 3.6.Giao diện đăng nhập hệ thống
Hình 3.7 Giao diện khi đăng nhập thành công với quyền Admin
Hình 3.8 Giao diện cập nhật lớp học trong trường
Hình 3.9 Giao diện cập nhật thiết bị trong phòng máy
Hình 3.10 Giao diện cập nhật phòng thực hành trong trường
Hình 3.11 Giao diện đăng ký lịch thực hành phòng máy
Hình 3.12 Giao diện xem lịch thực hành phòng máy
Trang 10MỞ ĐẦU
1 Lý do chọn đề tài
Trong những năm gần đây, các ứng dụng web lớn liên tục được tạo ra,đánh dấu những bước phát triển nhảy vọt về công nghệ trong thế giới lập trình.Các nền tảng hỗ trợ lập trình cũng được xây dựng hàng loạt nhằm mục đíchchính là cải thiện tốc độ thực thi và nâng cao tính bảo mật cho các ứng dụngweb Các nền tảng hỗ trợ lập trình ứng dụng (application framework) đều chứađựng các kinh nghiệm của các nhà kiến trúc phần mềm sau nhiều năm chiêmnghiệm trong thế giới lập trình
Framework hỗ trợ lập trình làm cho sự phát triển của các ứng dụng trở nêntrôi chảy hơn, bằng cách cung cấp một cấu trúc cơ bản để xây dựng những ứngdụng đó Hay nói cách khác framework giúp chúng ta thúc đẩy nhanh chóng quátrình phát triển ứng dụng, giúp tiết kiệm được thời gian, tăng sự ổn định cho ứngdụng, và có thể tái sử dụng lại được các thành phần Ngoài ra framework còngiúp những người mới bắt đầu có thể xây dựng các ứng dụng ổn định nhờ việctương tác chính xác giữa các Database, mã và giao diện một cách riêng biệt.Điều này cho phép chúng ta có thể dành nhiều thời gian để tạo ra các ứng dụngweb, hơn là phí thời gian viết các đoạn mã lặp lại trong một project
Vì vậy với mong muốn làm giảm thời gian phát triển một ứng dụng web,
tôi đã chọn đề tài “Xây dựng framework hỗ trợ lập trình web”
2 Nội dung của đề tài, các vấn đề cần giải quyết
Nghiên cứu cơ sở lý luận về nền tảng hỗ trợ lập trình ứng dụng web (Webapplication framework) Khái niệm, mục đích tạo ra Framework, và những đặcđiểm chung của các Framework phổ biến hiện nay Từ đó đưa ra kết luận thực tế
về việc xây dựng một Framework Tìm hiểu khái niệm và tính phổ biến của ứngdụng web, so sánh các ưu điểm và nhược điểm giữa web tĩnh và web động đểđưa ra những ưu điểm vượt trội của web động Rút ra khái niệm và đặc điểm củaWeb application Framework, Ngoài ra luận văn đưa ra ứng dụng của mô hìnhMVC, giới thiệu một số PHP Framework phổ biến hiện nay cũng sử dụng môhình MVC như CakeFramework, Zend Framework, CodeIgniter hay Symfony
Xây dựng thử nghiệm một framework bằng ngôn ngữ PHP dựa trên mãnguồn mở Trước khi giới thiệu về Framework thử nghiệm xây dựng được tácgiả luận văn đưa ra Zend Framework, phân tích các chức năng và thành phầncủa nó Dựa trên kiến thức thu được khi phân tích Zend Framework, tác giả xâydựng PHP Framework thử nghiệm, và đưa ra kiến trúc của Framework thửnghiệm, với hệ thống thư mục và các thành phần trong Framework thử nghiệm
Trang 11Ngoài ra luận văn cũng giới thiệu các lớp thư viện, và hàm hỗ trợ tự xây dựngđược khi làm Framework thử nghiệm.
Xây dựng ứng dụng Web “Quản lý đăng ký sử dụng phòng thực hành máytính trường Đại học Hải Dương” dựa trên Framework thử nghiệm, chỉ ra phươngthức vận hành của ứng dụng Trước khi xây dựng ứng dụng, tác giả đã tìm hiểu
về quy trình quản lý và sử dụng thực tế phòng thực hành máy tính trường Đạihọc Hải Dương Từ đó đi phân tích các nhu cầu và xây dựng các chức năngchính trong ứng dụng Web “Quản lý đăng ký sử dụng phòng thực hành máy tínhtrường Đại học Hải Dương” Luận văn cũng trình bày bản thiết kế hệ thống ứngdụng Và tác giả viết ứng dụng với Framework thử nghiệm Cuối cùng trongluận văn tác giả cũng mô tả về cách thức hoạt động của ứng dụng Web “Quản lýđăng ký sử dụng phòng thực hành máy tính trường Đại học Hải Dương”
3 Bố cục luận văn
Luận văn được thiết kế bao gồm 3 chương:
Chương 1 Tổng quan về nền tảng hỗ trợ lập trình Web (Web Application Framework)
Chương này giới thiệu tổng quan về framework, ứng dụng web, so sánhweb tĩnh và web động Lợi ích khi sử dụng web application framework để xâydựng ứng dụng web, web động, các dịch vụ web…
Ngoài ra chương 1 còn giới thiệu về PHP Framework với ý tưởng làmviệc chung của PHP Framework hiện nay qua mô hình kiến trúc MVC, và giớithiệu sơ qua về lịch sử và đặc điểm của một số PHP Framework hay được sửdụng nhất hiện nay
Chương 2 Xây dựng Framework thử nghiệm bằng ngôn ngữ PHP
Chương này giới thiệu tổng quan, các thành phần và chức năng củaFramework, từ đó tự xây dựng một Framework khác, đó là Framework thửnghiệm Chương 2 cũng cung cấp kiến trúc của Framework thử nghiệm, cáchthức vận hành và các thư viện hỗ trợ của Framework thử nghiệm
Chương 3 Xây dựng ứng dụng “Quản lý đăng ký sử dụng phòng thực hành máy tính trường Đại học Hải Dương” sử dụng Framework thử nghiệm
Giới thiệu về quy trình quản lý và sử dụng phòng thực hành trường Đạihọc Hải Dương Từ đó phân tích được nhu cầu của người dùng, và đưa ra cácchức năng cho ứng dụng Web Sau đó, chương 3 đưa ra bản thiết kế hệ thống vớicác biểu đồ Use Case và chi tiết lớp Cuối cùng mô tả về ứng dụng xây dựngđược thông qua hình ảnh một số giao diện chính
Trang 12Đặc điểm chung của các Framework:
- Framework đóng gói các thư viện: Trong Framework có chứa các thư viện hỗ trợ cho các nhà phát triển ứng dụng sử dụng
- Framework hoạt động chủ động: Bản thân Framework có thể tự đưa racác quyết định gọi (hoặc bị gọi bởi) một cái gì đó, có thể là thư viện hoặc ứngdụng
- Framework đưa ra một phương pháp luận để viết ứng dụng và thư viện
trên nó
Như vậy có thể nói, người lập trình ra Framework thực tế là viết ra mộtphần mềm ứng dụng khái quát, tạo ra một thư viện và một bộ gọi - tải - nạp ứngdụng Người lập trình ứng dụng sẽ dựa vào ứng dụng khái quát để phát triển ứngdụng trên Framework
1.2 Web Application Framework
Ứng dụng Web là một chương trình ứng dụng có thể tiếp cận web thôngqua mạng như Internet hoặc mạng nội bộ Để thiết kế website có 2 phương thứcchính để có thể thiết kế lên ứng dụng web đó là thiết kế web tĩnh và thiết kế webđộng:
- Web tĩnh: là các website chỉ bao gồm các trang web tĩnh, nội dung ítthay đổi và người sử dụng không tương tác được với nó, muốn thay đổi nội dungcủa nó người ta phải thay đổi trong mã nguồn Thiết kế web tĩnh người tathường sử dụng ngôn ngữ HTML, và thường không có cơ sở dữ liệu đi kèm.Như vậy với web tĩnh ta có thể thấy nó có ưu điểm là thiết kế đẹp (vì có thể trìnhbày ý tưởng về đồ họa và mỹ thuật trên từng diện tích trang web), tốc độ truycập nhanh (vì không mất thời gian truy cập cơ sở dữ liệu), chi phí đầu tư thấp (vìkhông mất phí cho việc lập trình web, thiết kế cơ sở dữ liệu và thuê chỗ cho cơ
sở dữ liệu,…) Nhưng sử dụng web tĩnh gặp khó khăn ở chỗ: khó thay đổi và
Trang 13cập nhật thông tin (muốn thay đổi phải biết ngôn ngữ html, sử dụng đượcchương trình thiết kế đồ họa và thiết kế web), thông tin không có tính linh hoạt
và không thân thiện với người dùng (người dùng muốn tăng lượng thông tin thìwebsite không đáp ứng được), và đặc biệt khó tích hợp, nâng cấp, mở rộng(muốn nâng cấp một website phải làm mới gần như toàn bộ website)
- Web động: là website có cơ sở dữ liệu đi kèm và được hỗ trợ bởi cácphần mềm phát triển web Với web động, thông tin hiển thị được gọi ra từ một
cơ sở dữ liệu khi người dùng truy vấn tới một trang web Web động thường đượcphát triển bằng các ngôn ngữ lập trình tiên tiến như PHP, ASP, ASP.NET, Java,CGI, Perl, và sử dụng các cơ sở dữ liệu quan hệ mạnh như Access,
MySQL, MS SQL, Oracle, DB2.Thông tin trên web động luôn được cập nhậttrong một cơ sở dữ liệu thông qua các công cụ cập nhật của phần mềm quản trịweb và người dùng Internet có thể xem những chỉnh sửa đó ngay lập tức Tuynhiên với web động thì chi phí đầu tư sẽ rất lớn
Trước đây, mỗi ứng dụng chạy với mô hình chủ - khách có chương trìnhriêng chạy trên máy khách phục vụ người sử dụng (ví dụ như giao diện ngườidùng) và phải được cài đặt trên từng máy cá nhân Khi ứng dụng tại máy chủđược nâng cấp thì tất cả các máy khách cũng phải được nâng cấp theo Ngượclại, ứng dụng web linh hoạt tạo ra một loạt các tài liệu Web ở định dạng chuẩnđược hỗ trợ bởi những trình duyệt phổ biến như HTML/XHTML Ngôn ngữkịch bản phía người dùng ở dạng ngôn ngữ chuẩn như JavaScript thường đượcthêm vào để có thêm những yếu tố động trong giao diện người dùng Nói chung,mỗi trang Web đơn lẻ được gửi tới người dùng như một tài liệu ổn định, nhưngthứ tự các trang có thể cung cấp cảm giác trực quan, khi những gì người dùngnhập vào sẽ được trả về thông qua thành phần mẫu Web được nhúng vào trongđánh dấu trang Trong quá trình giao dịch đó, trình duyệt Web sẽ thông dịch vàhiển thị trang, và hoạt động như một người dùng chung cho bất kỳ ứng dụngWeb nào
Ứng dụng Web phổ biến nhờ vào sự có mặt vào bất cứ nơi đâu của mộtchương trình Khả năng cập nhật và bảo trì ứng dụng Web mà không phải phânphối và cài đặt phần mềm trên hàng ngàn máy tính là lý do chính cho sự phổbiến của nó Ứng dụng Web được dùng để hiện thực Webmail, Bán hàng trựctuyến, Đấu giá trực tuyến, Diễn đàn thảo luận, Weblog, Hệ quản trị nội dung,Phần mềm quản lý nguồn nhân lực và nhiều chức năng khác
Web Application Framework là một Framework được thiết kế để hỗ trợ việc phát triển các website động, các ứng dụng web và các dịch vụ web
Trang 141.3 PHP Framework
PHP framework là web framework được viết bằng PHP - một ngôn ngữlập trình nguồn mở phổ biến nhất hiện nay
PHP framework làm cho sự phát triển của những ứng dụng web viết bằng
ngôn ngữ PHP trở nên trôi chảy hơn, bằng cách cung cấp một cấu trúc cơ bản để
xây dựng những ứng dụng đó Hay nói cách khác, PHP framework giúp đỡchúng ta thúc đẩy nhanh chóng quá trình phát triển ứng dụng, tiết kiệm đượcthời gian, tăng sự ổn định cho ứng dụng, và giảm thiểu số lần phải viết lại mãcho lập trình viên Ngoài ra PHP Framework còn giúp những người mới bắt đầu
có thể xây dựng các ứng dụng ổn định hơn nhờ việc tương tác chính xác giữa
các Database, mã (PHP) và giao diện (HTML) một cách riêng biệt Điều này cho
phép chúng ta dành nhiều thời gian để tạo ra các ứng dụng web, hơn là phí thờigian để viết các đoạn mã lặp lại trong một project
PHP là một ngôn ngữ script khá mạnh mẽ dùng để xây dựng website, vàhiện nay nó cũng đang có rất nhiều framework tốt như: zend framework,symfony, yii framework, codeigniter… được rất nhiều nhà phát triển ưa thích và
sử dụng Các PHP Framework đều được xây dựng theo chuẩn mô hình Model View - Controller (MVC) và cung cấp rất nhiều lớp hỗ trợ xử lý về bảo mật,phân quyền, captcha, view helper, module manager, database, service… khi đócác lập trình viên sẽ xây dựng, phát triển website một cách dễ dàng và nhanhchóng
-Ý tưởng chung đằng sau cách thức làm việc của một PHP frameworkđược kể đến là Model - View - Controller (MVC) MVC là một mô hình (kiếntrúc) trong lập trình, cho phép tách biệt các mã nghiệp vụ (business logic) vàgiao diện (UI) thành các phần riêng biệt, điều này đồng nghĩa với việc ta có thểchỉnh sửa chúng một cách riêng lẻ
1.4 Mô hình Model - View - Controller (MVC)
Trang 15thế kỷ 20) Ngày nay, trong nhiều các nền tảng lập trình chúng ta thấy sự có mặt của mô hình MVC, có thể kể đến (3):
- Swing Components của Java
- Document View Architecture trong Microsoft Visual C++ (VC++)
- QT4 (KDE)
- Apple’s Cocoa (Core Data)
1.4.2 Khái niệm mô hình MVC
Mô hình MVC (Model-View-Controller) là một kiến trúc phần mềm, đây
là mô hình tổ chức code một cách hợp lý và có hệ thống Mô hình MVC táchbiệt phần xử lý dữ liệu ra khỏi phần giao diện, cho phép phát triển, kiểm tra vàlàm việc theo dự án
Hình 1.1 Mô hình MVCTrong đó [3, 4]:
- Model: Cách thức cung cấp dữ liệu và xử lý dữ liệu (đóng vai trò Pháttriển) Các lớp thuộc thành phần Model thường thực hiện các tác vụ như truyvấn, thêm, xoá, cập nhật dữ liệu Khi dữ liệu trong Model thay đổi, thành phầnView sẽ được cập nhật lại Nói đơn giản hơn, Model là lớp thao tác với cơ sở dữliệu là chính
- View: là thành phần thể hiện dữ liệu trong Model thành các giao diệntương tác với người sử dụng (đóng vai trò thiết kế) Một mô hình có thể có nhiềuView phụ thuộc vào các mục đích khác nhau Nói đơn giản hơn, View là lớphiển thị dữ liệu ra bên ngoài cho người dùng xem
- Controller: đóng vai trò trung gian giữa Model và View Thông tinngười dùng từ View được gửi cho Controller xử lý, sau đó Controller tương tácvới Model để lấy dữ liệu được yêu cầu, sau cùng Controller trả dữ liệu này về
Trang 16cho View Nói đơn giản hơn, Controller là lớp điều khiển, có chức năng điềukhiển các hành vi, yêu cầu.
Mô hình MVC thường được sử dụng trong các ứng dụng web, vì thànhphần View (mã HTML/XHTML) được sinh ra từ các ngôn ngữ thiết kế website.Thành phần Controller sẽ nhận các dữ liệu GET/POST, xử lý những dữ liệu này,sau đó chuyển sang Model xử lý Model sẽ trả dữ liệu về phía Controller, sau đóController sinh mã HTML/XHTML để thể hiện trên View
- Cotroller nhận thông tin và thực thi yêu cầu
- Khi Model hoàn tất việc xử lý, View sẽ nhận kết quả và hiển thị lại cho người dùng [3, 4]
1.4.3 Các thành phần trong Web Framework
1.4.3.1 Model
Gồm các lớp cung cấp dữ liệu, dịch vụ liên quan đến dữ liệu và các vấn đề
xử lý nghiệp vụ Vì vậy model có thể [2, 4]:
- Đánh giá tính hợp lệ của dữ liệu (ví dụ kiểm tra dữ liệu vào có đúng với nguyên tắc của hệ thống không);
- Chuyển đổi dữ liệu (ví dụ chuyển đổi định dạng file, chuyển đổi tỉ giá, chuyển đổi ngôn ngữ…), đưa ra quyết định về nghiệp vụ;
- Thực hiện việc xử lý dữ liệu theo một quy trình nghiệp vụ
Do có hai vai trò tương đối tách biệt cho nên Model thường được tách thành các lớp có các vùng xử lý khác biệt:
- Vùng xử lý logic nghiệp vụ: thường là xử lý về nguyên tắc của nghiệp
vụ cũng như quy trình nghiệp vụ
- Vùng xử lý dữ liệu: cung cấp/lưu trữ dữ liệu và việc chuyển đổi dữ liệu thành các dạng khác nhau theo yêu cầu
Trong các tình huống đơn giản, Model chỉ làm vài thao tác đơn giản nhưlấy dữ liệu từ database Trong các tình huống phức tạp, việc xử lý có thể là tổhợp của hàng trăm lớp diễn ra trên một hoặc vài máy chủ (server) hoặc thậm chí
dữ liệu hay quyết định được đưa ra từ Model lại là tổng hợp kết quả từ một vàitrung tâm dữ liệu nằm rải rác trên vài lục địa Do vậy trong Model không chỉ cócác thao tác trên database mà nó còn với file system, memory, networking I/O
Model hoạt động như là một tầng dịch vụ có thể tái sử dụng các lớp
Controller
Trang 17- Phần Logic: xử lý cách áp dụng dữ liệu vào cấu trúc trình bày Phần này
có thể kiểm tra dữ liệu để có thể hiển thị dữ liệu với cấu trúc template đang có ,kiểm tra trạng thái và đặc tính của dữ liệu để lựa chọn một cấu trúc hiển thị phùhợp
Bản thân View cũng là một tổ hợp của nhiều lớp Và nó cũng có thể có View con để giảm tải trên một số lớp chính và để tái sử dụng mã
Trong mô hình truyền thống, View có trách nhiệm chuyển đổi dữ liệu haytrạng thái của Model thành cấu trúc trực quan Do vậy dữ liệu của Model cầnđược định nghĩa một cách hợp lý Sự tách biệt của hai thành phần này sẽ giúpcho người lập trình phân biệt rõ ràng giữa cách thức lưu trữ/lấy dữ liệu và cáchtrình bày dữ liệu Do vậy tính phức tạp của quy trình lấy dữ liệu, xử lý dữ liệu(sự thay đổi của chúng theo thời gian) trước khi trả về sẽ không làm ảnh hưởngđến việc trình bày dữ liệu Rõ ràng sự khác biệt về công nghệ lấy dữ liệu vàcông nghệ sinh trang không gây ảnh hưởng đến ứng dụng Điều này khá quantrọng trong việc tích hợp các ứng dụng Ngoài ra, cách làm này thực sự đảm bảoviệc tách biệt vai trò của người thiết kế giao diện với vai trò của lập trình viênthiên về dữ liệu Như vậy khi làm việc theo nhóm, người quản trị dự án có thể tổchức nhóm phát triển thành các nhóm kĩ năng và phát triển ứng dụng song songvới nhau
Các công nghệ thường được sử dụng ở View là HTML, CSS vàJavaScript
Hình 1.2 Biểu đồ tuần tự một chuỗi MVC đơn giản
Trang 181.4.3.3 Controller
Controller là các lớp điều khiển luồng ứng dụng, tiếp nhận yêu cầu ngườidùng thông qua HTTP header, sau đó chuyển tiếp nó đến các lớp phụ trách trựctiếp xử lý yêu cầu Như vậy Controller đóng vai trò là trung tâm điều khiển,nhưng Model không biết Controller nào sẽ lựa chọn nó, nó bị động Tương tự,View không biết Controller nào sẽ gọi nó ra và cung cấp cho nó dữ liệu gì, nócũng bị động Bằng cách đó, View và Model không hề biết nhau.Tùy theo cáchthiết kế lớp mà chúng ta thường thấy Controller gồm [2, 4]:
- Front Controller: Là một controller xử lý tất cả các yêu cầu người dùngcho website Front Controller có nhiệm vụ hợp nhất tất cả các xử lý yêu cầu vàomột kênh yêu cầu thông qua một đối tượng
- Dispatcher: Lớp điều phối hướng các điều khiển đi mức cao hơn
- Request: xử lý một phần dữ liệu đầu vào ở mức GET, POST và PUT
- Session: xử lý một phần dữ liệu đầu vào ở mức SESSION
Tùy theo dữ liệu đầu vào, Controller sẽ thực hiện các phép lọc (với dịch
vụ lấy từ Model), các tính toán lựa chọn (Action Mapping) dựa trên kiến trúc vàcấu hình nhằm xác định thành phần lớp chính sẽ thực hiện yêu cầu của ngườidùng Đây chính là chức năng điều khiến luồng ứng dụng của Controller Vì lànơi đón nhận dữ liệu đầu vào cho nên thường thì các thành phần xử lý form (ví
dụ ActionForm trong Struts) sẽ thuộc về Controller Controller cũng sẽ có chứcnăng xác nhận đơn giản nhằm thực hiện chức năng điều khiển luồng của mình.Controller nhận dữ liệu nhập vào qua View, sau đó gọi Model tương ứng rồi lấykết quả trả về từ Model này Tiếp theo, một View thích hợp sẽ được lựa chọn.Controller sẽ chuyển tiếp dữ liệu vào view để nó xử lý
Một số hoạt động thường thấy của Controller:
- Tạo form, gửi tin nhắn đến form để yêu cầu kiểm tra dữ liệu
- Tạo các dịch vụ liên quan đến nghiệp vụ ứng dụng, yêu cầu các lớp dịch
vụ tương tác với nguồn dữ liệu để trả về hay thay đổi trạng thái dữ liệu: thựchiện các thao tác chuyển đổi dữ liệu, kiểm tra quyền truy cập trên một hoạt động
cụ thể, tương tác với database, tương tác với các web services
- Tạo đối tượng view, gán các nguồn dữ liệu lấy được từ đối tượng dịch
vụ vào cho view
Khi Controller gọi Model thông qua các giao diện lập trình (API) củaModel, nó cần biết một số ứng xử chung của Model Ví dụ: cách Model đó gửitín hiệu về quá trình nó xử lý yêu cầu, kiểu trả về cần mang tính nhất quán
Mô hình Model - View - Controller được áp dụng chủ yếu trong các Web framework hiện nay Các PHP framework phổ biến nhất có thể kể đến:
Trang 19- CakePHP: là một lựa chọn tốt cho những lập trình viên có kiến thứcnâng cao về PHP Mục đích của nó là cung cấp một framework cho người sửdụng php phát triển những ứng dụng web nhanh, mạnh mẽ, linh hoạt, và điềuquan trọng là CakePHP là một OpenSource (miễn phí) Để sử dụng nó, yêu cầungười làm phải biết những kiến thức như: Cơ bản về PHP và HTML, kiến trúcModel - View - Controller, Lập trình hướng đối tượng Với các hệ thống hỗ trợ,tính đơn giản và môi trường mở cao đã giúp cho CakePHP trở thành một trongnhững framework phổ biến nhất hiện nay Điểm nổi bật của CakePHP là đượccộng đồng mạng tích cực chia sẻ, cấu trúc khung rất dễ hiểu và đặc biệt là CakeBakerry là nơi các nhà phát triển bên thứ ba có thể thêm mã riêng của họ và chia
sẻ với cộng đồng CakePHP là khung framework không có sự ủng hộ của công
ty, nhưng đó cũng có thể coi là một thuận lợi của nó vì như vậy nó được cộngđồng lựa chọn và phát triển nhiều hơn [9,10]
- CodeIgniter: một MVC framework viết bằng PHP4 (đã tương thích hoàntoàn với PHP 5.3.0 trong phiên bản 1.7.2) Được biết đến như một framework dễhiểu, dễ sử dụng và rất nhẹ nên nó có tốc độ rất nhanh Đặc biệt là bạn có thểthêm phần mềm của bên thứ ba nào khác mà chạy vẫn không cảm thấy chậm đi.CodeIgniter được Rasmus Lerdorf - cha đẻ của ngôn ngữ PHP - đánh giá rất cao
vì tính tinh giản về cấu trúc, đạt hiệu năng cao khi vận hành Nó cung cấp cácgiải pháp đơn giản, và có một thư viện video hướng dẫn phong phú, diễn đàn hỗtrợ, và cung cấp sẵn một hướng dẫn sử dụng cho người mới bắt đầu PHPframework này rất phù hợp cho một người mới làm quen với framework [4]
- Zend framework: là sản phẩm của Zend – công ty “bảo trợ” cho PHP.Với các tính năng mạnh mẽ, Zend framework thường được sử dụng cho cáccông ty lớn, và bạn cần phải có lượng kiến thức khá sâu rộng về PHP để có thể
sử dụng được Zend framework [2, 6]
- Symfony: được ra đời nhằm mục đích giúp đỡ nâng cao hơn cho nhữnglập trình viên muốn tạo ra các ứng dụng website doanh nghiệp Đây là một PHPframework mã nguồn mở với đầy đủ các tính năng cần thiết, nhưng nó có vẻchạy chậm hơn các framework khác [10]
Như vậy: PHP framework là một giải pháp có thể giúp cho các lập trìnhviên phát triển các kỹ năng như: giảm thiểu việc viết lại mã, tăng tốc quá trìnhphát triển ứng dụng, và chuẩn hóa mã lệnh khi xây dựng các ứng dụng web.Không chỉ giúp các bạn cải thiện tốc độ phát triển ứng dụng, nó còn giúp bạngiảm thiểu các lỗ hổng bảo mật một cách triệt để PHP framework phù hợp cho
cả những người mới làm quen hay những bạn đã có kiến thức vững về PHP
Trang 20CHƯƠNG 2 XÂY DỰNG THỬ NGHIỆM FRAMEWORK
BẰNG NGÔN NGỮ PHP 2.1 Tổng quan về một PHP Framework
Hầu hết các PHP framework đều có sẵn rất nhiều thành phần mở rộng(extensive), và cũng có rất nhiều framework khác nhau để lựa chọn Ví dụ ZendFramework là một PHP framework được lập trình bằng ngôn ngữ PHP và dựatrên mô hình Model - View - Controller, giúp tách các thành phần xử lý ra mộtcách rõ ràng, giúp code dễ dàng được quản lý, chỉnh sửa và nâng cấp Các đặcđiểm của Zend Framework [1, 6]:
- Tạo ứng dụng web theo mô hình chuẩn Model - View - Controller
- URL tiêu chuẩn, ngắn gọn
- Hỗ trợ phân quyền tới từng Action
- Có các thành phần thư viện hỗ trợ API của các nhà cung cấp như Yahoo,
Google, Flick
- Có rất nhiều thư viện được hỗ trợ sẵn
- Được xây dựng trên nền tảng lập trình hướng đối tượng nên có thể thừa
kế, nâng cấp ứng dụng một cách dễ dàng
- Dễ dàng phát triển thêm các ứng dụng nhúng, sử dụng các plugins
- Ta đi tìm hiểu cấu trúc và chức năng của các thành phần trong ZendFramework, trước khi phân tích PHP Framework thử nghiệm, để thấy được sựkhác nhau giữa chúng
Mô hình Model - View - Controller trong Zend Framework (Xem hình 2.1)
Hình 2.1 Mô hình Model – View – Controller trong Zend Framework
Model: Thành phần model được xây dựng thành các lớp kế thừa từ lớpZend_Db_Table hoặc Zend_Db_table_Abstract được đặt trong thư mụcapplication/models của ứng dụng Mỗi lớp sẽ đảm nhận việc kết nối và thao tácđến table trong cơ sở dữ liệu
Trang 21View: Thành phần của view được đặt trong thư mục application/views.Trong thư mục views có 3 thành phần:
- Scripts: chứa các thư mục gồm các file ánh xạ đến các controller/action
để hiển thị trang giao diện tương ứng
- Helpers: trong thư mục này chứa các lớp mà chúng ta tạo ra và các lớpnày sẽ được nạp tự động cho đối tượng Zend_View thông quaZend_View_Helper để giúp chúng ta dễ dàng gọi đến hàm được xây dựng tronglớp này mà không cần phải khai báo trước vì nó được xem là một thành phầntrong thư viện của Zend
- Filers: tương tự như helpers, thành phần filters chứa các lớp giúp chochúng ta có thể thay đổi hoặc xóa những dữ liệu không mong muốn trong quátrình nhập liệu thông qua bộ lọc này
Controller: có nhiệm vụ điều hành trang web của bạn Một trang web cóthể có nhiều module, một module có thể có nhiều controller, một controller gồm
có nhiều action Zend Framework sử dụng đối tượng Front Controller để quản lýcác Request được gửi tới Web Server Và dựa trên Request đó nó sẽ gọi các lớp
xử lý Model và trả về kết quả trình bày với các lớp View.index.php là một filerất quan trọng trong website, nó có nhiệm vụ đón đầu tất cả các request vào, sau
đó khởi tạo controller và dispatch request đến controller tương ứng.bootstrap.php có nhiệm vụ khởi tạo các đối tượng toàn cục sử dụng cho website,bẫy lỗi của ứng dụng và đưa về cho errorController xử lý
Cấu trúc thư mục của Zend Framework (Xem hình 2.2)
Hình 2.2 Cấu trúc thư mục của Zend Framework
Trang 22Ý nghĩa và chức năng của các thành phần trong Zend Framework (6):
- Thư mục Config: là nơi chứa những cấu hình của toàn bộ dự án đang được
xây dựng; nó gồm tập tin cấu hình application.config.php nơi khai báo các module
sẽ được sử dụng, các thiết lập cấu hình cho toàn bộ dự án… và một thư mục
autoload là những tập tin cấu hình tự động được load vào dự án có đuôi mở rộng
(*.local.php hoặc *.global.php) Những tập tin cấu hình có đuôi mở rộng là
(*.local.php) sẽ bị bỏ qua khi các bạn commit dự án lên Git, nên những thông tinnhạy cảm như tài khoản kết nối database cũng thường được đặt vào trong các tậptin này
- Thư mục Data: thư mục chứa những dữ liệu được cached từ database,hoặc cache những toàn bộ cấu hình của dự án… Chúng ta lưu trữ các tập tin dữliệu trong thư mục này để dễ dàng quản lý và xử lý
- Thư mục Module: nơi chứa những module mở rộng, bạn có thể xâydựng những module mới dành riêng cho dự án của bạn giúp bạn xây dựng dự ánmột cách nhanh chóng và hiệu quả nhất
- Thư mục public: là nơi những tập tin như css, js, font, hình ảnh,… để hỗtrợ cho việc hiển thị website trên trình duyệt, nó chứa những tài nguyên côngkhai và dễ dàng truy nhập
- Thư mục vendor: nơi chứa bộ thư viện Zend Framework 2 và nhữngmodule mở rộng khác Bạn có thể đặt module mở rộng ở cả trong 2 thư mực
module hoặc vendor
PHP Framework thử nghiệm được chúng tôi xây dựng và phát triển, có nhiều ưu điểm khác so với các PHP framework hiện nay:
- Tạo ứng dụng web theo mô hình chuẩn Model – View – Controller,
nhưng với nguyên tắc đặt tên của các thành phần View, Controller là View_ini, Controller_ini Với giá trị biến ini được lấy từ yêu cầu người dùng (địa chỉ URL), như vậy với việc triệu gọi lớp join_path nó sẽ thực hiện việc ghép các
thành phần Model – View – Control có liên quan lại với nhau Thành phần
Model được thừa kế từ lớp mysql (system/Database) chủ yếu tương tác với cơ sở
dữ liệu, thành phần Controller sử dụng lớp Model tương tác với cơ sở dữ liệu đểthực hiện các thao tác xử lý yêu cầu người dùng, thành phần View tạo giao diệntương tác với người dùng sử dụng lớp Controller tương ứng để nhận kết quả củatrang ứng dụng
- Có thể sử dụng ngay hàm trong thư viện (thư mục system\Lib) với các
lớp Registry (system\CoreAc) và autoload (system\Lib) mà không cần khai báo.
Vì với lớp Registry Framework thử nghiệm sẽ tiến hành đăng ký với hệ thống,
Trang 23và với lớp autoload nó sẽ tiến hành dò tìm trong thư viện và tự khai báo các lớp
để có thể sử dụng
- Trong thư viện Framework thử nghiệm xây dựng sẵn lớpExportDataExcel, sử dụng để xuất báo cáo ra các file có định dạng khác (Ví dụ.xls, tsv, csv) Các Framework khác nếu muốn có chức năng này thì phải càithêm plugin, trừ những Framework chuyên về phần mềm tài chính và bán hàngtrực tuyến
- Ngoài ra trong thư viện Framework thử nghiệm có xây dựng lớp
password_en_de quy định việc mã hóa và giải mã riêng, mặt khác cùng với hàm session được dùng để lưu các phiên làm việc, các máy khác nhau sẽ có phiên
làm việc khác nhau, Framework thử nghiệm cũng quy định việc bảo mật khácvới các loại Framework khác Có thể dễ dàng phát triển thêm các lớp trong thưviện theo yêu cầu của người dùng, nhưng phải tuân theo nguyên tắc tên lớp phảitrùng với tên file chứa nó, và phải được đặt trong thư mục system/Lib
Ngoài những thành phần khác so với PHP Framework phổ biến hiện nay,PHP Framework thử nghiệm được chúng tôi xây dựng cũng kế thừa những PHPFramework khác Ví dụ như một số hàm định nghĩa kiểu dữ liệu trong thư mục
helpers đã được PHP hỗ trợ rất tốt (như array, number, string, text,…).
Framework thử nghiệm là một PHP framework được viết ra nhằm mụcđích tận dụng mọi ưu điểm của mô hình MVC trong việc xây dựng các ứng dụngweb động bằng ngôn ngữ PHP Framework thử nghiệmgiúp các lập trình viêntạo nên các ứng dụng web có kiến trúc sáng sủa, dễ bảo trì và dễ mở rộng Bêncạnh đó, Framework thử nghiệm cho phép các nhà phát triển xây dựng một ứngdụng web nhanh hơn rất nhiều so với việc viết mã thuần túy bằng cách cung cấpmột bộ thư viện đầy đủ cho các tác vụ thông thường, cũng như cung cấp một môhình tương tác đơn giản và dễ hiểu cho việc kết nối tới những bộ thư viện đó
Các đặc điểm nổi bật của Framework thử nghiệm:
- Tính dễ sử dụng (với cả các lập trình viên chưa có nhiều kinh
- Thư viện hỗ trợ caching
- Mềm dẻo trong việc định tuyến URL (URL Routing)
- Tích hợp một số lớp và thư viện hàm hỗ trợ thuận tiện cho người sửdụng: gửi Email, hỗ trợ đính kèm, HTML/Text email, đa giao thức (sendmail,
Trang 24SMTP, and Mail) – Email Class; đăng tải một file lên server – Upload Class; tương tác với máy chủ thông qua giao thức FTP-FTP Class; phân trang tự động– Pagination Class; tạo ảnh Captcha - một loại kiểm thử dạng hỏi đáp được dùngtrong máy tính để xác định xem người dùng có phải là con người hay không -Captcha Class; xuất dữ liệu ra định dạng khác (Excel, tsv hay csv) – ExportDataClass; lớp quy định việc bảo mật - Password_en_de Class (lớp này bao gồm 2hàm xử lý việc mã hóa encode($str) và hàm xử lý việc giải mã decode($str));đặc biệt hệ thống sẽ tự động add theo cấu trúc tên lớp và file trùng nhau và nằmtrong thư mục Lib nếu người dùng sử dụng mà không khai báo; một lượng lớncác hàm hỗ trợ (trong thư mục System/helpers).
Yêu cầu khi sử dụng Framework thử nghiệm: Để hệ thống vận hành được,yêu cầu tối thiểu sau cần được đáp ứng:
- Web server: Apache, Nginx, Lighttpd
- PHP 5.2.6 trở lên
- Database: MySQL
- Web server: Apache 2.2.11 kết hợp với PHP như là một module
- PHP 5.2.6 trở lên có bật Apache
2.2 Kiến trúc của Framework thử nghiệm
2.2.1 Tổng quát về hệ thống thư mục trong Framework thử nghiệm
Cấu trúc về hệ thống thư mục và tệp tin trong Framework thử nghiệm(Xem hình 2.3) Trong đó:
Trang 25Hình 2.3 Cấu trúc hệ thống thư mục Framework thử nghiệm
Có thể thấy Framework thử nghiệm được xây dựng hỗ trợ cho các lậptrình viên viết các ứng dụng web quản lý Ví dụ có thể thấy Framework thửnghiệm hỗ trợ chức năng xuất excel từ các bảng biểu báo cáo với lớpExportDataExcel trong thư viện Lib Hay Framework thử nghiệm đưa ra nhữngquy định riêng về vấn đề bảo mật, nên việc bảo mật hệ thống của Frameworkthử nghiệm cũng khác so với các Framework khác hiện nay Framework thửnghiệm sẽ sử dụng hàm Session để lưu lại các phiên làm việc, và với các máykhác nhau nó cũng sẽ có các phiên làm việc khác nhau
Ngoài ra trong Framework thử nghiệm xây dựng hàm autoload(System/Lib/autoload.php), có thể tự động add các lớp và hàm theo cấu trúc tênlớp và file trùng nhau nằm trong thư mục Lib Như vậy khiến cho người dùng cóthể phát triển thêm các plugin theo nhu cầu của họ
Trang 262.2.2 Các thành phần trong Framework thử nghiệm
2.2.2.1 Quy trình xử lý yêu cầu
Quy trình xử lý một yêu cầu của ứng dụng viết bởi PHP Framework được
mô tả qua sơ đồ sau (Xem hình 2.4):
Index.php
ViewHình 2.4 Quy trình xử lý một HTTP Request của Framework thử nghiệm
Bước 1: File index.php được dùng như một front controller, có nhiệm vụ
khởi tạo các tài nguyên cơ bản cần thiết cho việc chạy Framework thử nghiệm
Bước 2: File ini.php kiểm tra HTTP request để xác nhận những việc phải làm, và tiến hành xử lý dữ liệu bằng cách gọi lớp join_path để trả về cho user.
Bước 3: Lớp join_path tiến hành xử lý dữ liệu, ở đây chính là xử lý
model - view - controller Lớp join_path sẽ ghép các thành phần Model, View,
Controller lại với nhau Với việc quy định các file trong Controller, View được
đặt tên: Controller_ini, và View_ini sẽ giúp cho lớp join_path sẽ dễ dàng gọi, và
ghép các thành phần Controller và View liên quan đến nhau thông qua địa chỉ
URL và giá trị biến ini
Bước 4: Cuối cùng thành phần View được gọi và gửi tới trình duyệt
2.2.2.2 Các thành phần
Các thành phần cốt lõi trong Framework thử nghiệm bao gồm:
Index.php
ViewHình 2.5 Quy trình xử lý một HTTP Request của Framework thử nghiệm
File index.php: Khi user yêu cầu, file index.php ở bên ngoài sẽ đóng vai
trò tiếp nhận thông tin đầu tiên, sau đó nó sẽ khởi tạo các lớp cơ sở (ở file
Registry.php trong Core_Ac, và mysql.php trong Database) và triệu gọi các hàm (ở file load_common.php, common.php, ini.php trong Core_Ac, và