TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÀI TẬP LỚN
MÔN: KIẾN TRÚC PHẦN MỀM
Nghiên cứu, tìm hiểu và xây dựng tài liệu kiến trúc của Framework
nguồn mở Yii
Giáo viên hướng dẫn: TS. Cao Tuấn Dũng
Học viên thực hiện : Vũ Văn Soái CB120109
Phạm Văn Phong CB120103
Nguyễn Quỳnh Vân CB120123
Lê Thị Trang CB120118
Nguyễn Văn Chiến CB121349
Nguyễn Văn Thông CB121357
Lớp: Công nghệ thông tin 2 (KT)
Chuyên ngành: Công nghệ thông tin (KT)
HÀ NỘI 04 – 2013
Trang 1
MỤC LỤC
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 1
LỜI NÓI ĐẦU 3
CHƯƠNG 1. TỔNG QUAN VỀ YII 4
1.1. Yii là gì? 4
1.2. Đặc tính 4
1.3. Ưu Điểm 6
1.4. Cài đặt Yii 8
CHƯƠNG 2. CÁC TÍNH NĂNG CỦA YII FRAMEWORK 9
2.1. Mô hình thiết kế Model-View-Controller (MVC) 9
2.2. Database Access Objects (DAO), Query Builder, Active Record, DB Migration
18
2.3. Form nhập và kiểm tra (validate) 18
hướng dẫn, tạo điều kiện tốt để chúng em hoàn thành tiểu luận của mình.
Hà Nội, ngày 2 tháng 4 năm 2013
Nhóm trưởng
Vũ Văn Soái
Trang 3
CHƯƠNG 1. TỔNG QUAN VỀ YII
1.1. Yii là gì?
Yii là một PHP framework được xây dựng để phát triển các ứng dụng web
quy mô lớn dựa trên nền tảng component (thành phần sử dụng lại). Yii cho phép
tái sử dụng tối đa các thành phần của hệ thống (ứng dụng) để tăng tốc độ viết
ứng dụng. Tên Yii (phát âm là `/i:/`) theo tiếng Anh là easy, efficient và
extensible.
Yii được viết bằng PHP5, chủ yếu tập trung vào high-performance,
component-based cho phép dễ dàng tạo cũng như bảo trị các ứng dụng web,
giúp làm việc hiệu quả hơn.
Yii - nói chung là một framework phát triển ứng dụng Web nên có thể dùng
để viết mọi loại ứng dụng Web. Yii rất nhẹ và được trang bị giải pháp cache tối
ưu nên nó đặc biệt hữu dụng cho ứng dụng web có dung lượng dữ liệu trên
đường truyền lớn như web portal, forum, CMS, e-commerce
1.2. Đặc tính
Easy: Để phát triển ứng dụng trên Yii cần biết PHP và OOP, ứng dụng
được viết và bảo trì dựa trên các PHP class được thừa kế từ core Yii Framework
Efficient: Ứng dụng Yii được viết theo mô hình MVC (Model-View-
Controller) điều này giúp tăng khả năng tái sử dụng code, dễ dàng bảo trì cũng
như nâng cấp sau này mà không ảnh hưởng nhiều đến hệ thống hiện tại. Việc
tách biệt giữa business logic và presentation tăng khả năng tùy biến cho các site
khác nhau.
Extensible: Hệ thống hỗ trợ sẵn ajax, web service, ADO, Active Record,
cache, i18n, RBAC, theme… Ngoài các thư viện được cung cấp kèm theo, có
thể dễ dàng phát triển các extension theo nhu cầu hoặc sử dụng các thư viện
Yii có hiệu xuất cao
Yii đã được thiết kế cẩn thận để cho phép gần như tất cả đoạn code được
phát triển và chỉnh sửa để đáp ứng bất kỳ yêu cầu nào. Nếu muốn phát triển
code mở rộng hơn thành các công cụ hữu ích cho các nhà phát triển khác sử
dụng, Yii cung cấp theo các bước và hướng dẫn để giúp bạn dễ dàng phát triển.
Điều này cho phép đóng góp vào danh sách ngày càng tăng các tính năng của
Yii và tích cực tham gia trong việc mở rộng. Điều gì đáng chú ý về Yii ? là dễ
sử dụng, hiệu suất cao, và chiều sâu mở rộng không tốn kém. Yii được đóng gói
với các tính năng giúp bạn đáp ứng những nhu cầu cao trên ứng dụng web hiện
nay. AJAX cho phép web tích hợp các widgets, thực thi của một kiến trúc MVC,
DAO và quan hệ lớp ActiveRecord, kiểm soát truy cập, xem video chuyên
nghiệp, quốc tế (I18N),và nội địa hoá (l10n), đây là các tính năng vượt trội của
Yii. Với phiên bản 1.1, Framework chính bây giờ là được đóng gói với một thư
viện mở rộng chính thức được gọi là Zii. Những mở rộng được phát triển và duy
trì bởi các thành viên chủ chốt tiếp tục mở rộng tính năng của Yii.
1.3. Ưu Điểm
Yii tốt hơn các Framework khác bởi tính hiệu quả, nhiều tính năng. Yii
được thiết kế cẩn thận từ ban đầu để đáp ứng nhu cầu phát triển ứng dụng Web
nghiêm ngặt. Yii là kết quả của sự kết hợp những gì tốt nhất của các Framework
đi trước. Nó là kết quả của kinh nghiệm phát triển ứng dụng Web lâu năm của
các tác giả và sự phân tích kỹ lưỡng, tận dụng những điểm mạnh của các
Framework khác.
Trước đó, Qiang đã từng phát triển PRADO nhiều năm. Những năm kinh
nghiệm và đánh giá của người sử dụng, cần một Framework PHP dễ dàng hơn,
mở rộng hơn và hiệu quả hơn để đáp ứng nhu cầu ngày càng tăng của các nhà
phát triển ứng dụng web. Số liệu cực kỳ ấn tượng khi so sánh với các
Trang 6
Framework PHP khác dựa trên hiệu suất của nó ngay lập tức đã thu hút sự chú
ý rất tích cực.
Khả năng tái sử dụng và mở rộng của Yii rất cao. Yii là 1 Framework hoàn
CHƯƠNG 2. CÁC TÍNH NĂNG CỦA YII FRAMEWORK
2.1. Mô hình thiết kế Model-View-Controller (MVC)
Yii framework sử dụng kiến trúc đã được kiểm chứng MVC, hỗ trợ việc
phân tách các phần liên quan với nhau.
MCV (Model View Controller) là tên một phương pháp chia nhỏ một ứng
dụng thành ba thành phần để cài đặt, mỗi thành phần đóng một vai trò khác nhau
và ảnh hưởng lẫn nhau, đó là models, views, và controllers.
Trang 9
Hình 2.1. Mô hình MVC
Models (Tầng dữ liệu): là một đối tượng hoặc một tập hợp các đối tượng
biểu diễn cho phần dữ liệu của chương trình, ví dụ như các dữ liệu được lưu
trong database, dữ liệu từ một hệ thống các ứng dụng khác như legacy system,
file system, mail system …
Thông thường trong kiến trúc MVC, Model là phần rất quan trọng trong cả
dự án, nó có quan hệ mật thiết với cơ sở dữ liệu.
Yii có 2 loại model: form model là lớp (CFormModel) và active record
model là lớp (CActiveRecord). Cả hai được mở rộng từ lớp (CModel).
CFormModel đại diện cho mô hình dữ liệu do người dùng nhập vào ở dạng
HTML. Sau đó lưu dữ liệu này vào bộ nhớ và thông qua CActiveRecord dữ liệu
được lưu vào CSDL.
Trang
10
ActiveRecord (AR) là một mô hình được sử dụng để truy cập cơ sở dữ liệu
theo hướng đối tượng. Mỗi đối tượng AR trong Yii là một thể hiện của
CActiveRecord là kết quả của 1 dòng dữ liệu của bảng được tạo trong CSDL.
Views (Tầng giao diện): là phần giao diện với người dùng, bao gồm việc
hiện dữ liệu ra màn hình, cung cấp các menu, nút bấm, hộp đối thoại, chọn lựa
…, để người dùng có thể thêm, xóa, sửa, tìm kiếm và làm các thao tác khác đối
với dữ liệu trong hệ thống Thông thường, các thông tin cần hiển thị được lấy từ
thành phần Models.
Trong kiến trúc MVC, view chỉ có tác dụng hiển thị giao diện, còn điều
khiển dòng nhập xuất của người dùng vẫn do Controllers đảm trách. Trong phân
tích/ thiết kế hướng đối tượng (OOA/OOD), khi nói đến MVC, người ta thường
dùng các thuật ngữ MVC Design Pattern, MVC Framework, MVC Paradigm.
Có người lại nói, về thiết kế chương trình, vẽ diagram về cấu trúc của chương
trình, MVC là một phương pháp thiết kế (Design Pattern). Khi có một bộ công
cụ tiện ích lập trình hỗ trợ cho lập trình viên viết chương trình theo phương pháp
MVC (ví dụ như Jakarta Struts ), thì bộ công cụ tiện ích lập trình đó gọi là MVC
Framework implementation. Còn từ Paradigm dùng cho MVC mang tính chất
chỉ chung chung. Hiện nay, tại Mỹ, các thuật ngữ trên thường được dùng lẫn,
tùy theo tác giả và hoàn cảnh.
Sau đây là quy trình hoạt động:
Lược đồ sau đây mô tả một workflow tiêu biểu của 1 ứng dụng Yii khi
đang xử lý request từ user.
Trang
12
Hình 2.2. Quy trình hoạt động
Trang
13
1. user gửi một request với một
2. url Web
Server sẽ xử lý request đó bằng cách thực thi script bootstrap
(index.php).
3. Script bootstrap sẽ tạo một thể hiện (instance) của Application và
chạy nó.
4. Application lấy thông tin trong request từ một component ứng dụng
có tên là request.
5. Ứng dụng sẽ xác định controller và action phù hợp với sự giúp đỡ của
một component ứng dụng có tên là urlManager. VD: Từ url trên, ta
thấy controller cần gọi là post và trong controller này action ta cần gọi
tách rời phần trình bày và logic của chương trình, trang JSP nhận request chỉ
đóng vai trò Điều khiển (Controller). MVC model 1 có một nhược điểm là phần
logic điều khiển được viết trong trang JSP, như vậy phần chương trình Java
phức tạp dùng để điều khiển sẽ bị lẫn vào trong mã HTML dùng để trình bày.
Độ phức tạp của chương trình càng cao, thì trang JSP càng khó bảo trì. Hơn nữa
trong các dự án phần mềm phức tạp, thì phẩn hiển thị của trang JSP thường
được làm bởi người thiết kế Web, giỏi về HTML và đồ họa, còn phần chương
trình Java được viết bởi lập trình viên chuyên về lập trình. Trong các dự án phức
tạp, dùng JSP làm phần điều khiển sẽ làm lẫn lộn việc phân chia ranh giới trách
nhiệm giữa nhóm thiết kế đồ họa và nhóm lập trình, đôi khi dẫn đến việc bảo trì
và phát triển trở nên rất khó khăn, gần như không thể làm được.
Trang
15
MVC 2: Trong MVC model 2, một hoặc nhiều servlet (thường là một)
đóng vai trò điều khiển, các Java Bean đóng vai trò Mô hình và các trang JSP
đóng vai trò hiển thị.
Trong model 2, các logic phức tạp của chương trình được viết hoàn toàn
trong các servlet, là các chương trình Java. Phần hiển thị chỉ gồm các trang JSP
với một vài mã đơn giản để lấy dữ liệu có sẵn, không có logic phức tạp, vì thế
hoàn toàn có thể được tạo ra bằng những người thiết kế Web. Các yêu cầu của
người dùng được gửi từ trình duyệt Web tới servlet. Servlet sẽ khởi tạo Java
Bean (nếu cần thiết), ra lệnh thu thập, cập nhật thông tin. Khi Java Bean hoàn
thành công việc, servlet sẽ chọn trang JSP thích hợp để hiện thông tin trong Java
Bean cho người dùng. Đây chính là một cách sử dụng MVC rất hiệu quả trong
Java.
Tất nhiên là sử dụng MVC model 2 một cách hoàn toàn cứng nhắc, phần
Điều khiển chỉ dùng servlet, phần Hiển thị chỉ dùng JSP sẽ dẫn đến một vài
trường hợp kém hiệu quả, nhất là khi có các request từ trình duyệt Web chỉ đòi
hỏi việc hiển thị thông tin.
Ví dụ: Một trang Web đang hiện các mail trong mail box từ mail thứ 20
Migration
Yii framework cho phép người sử dụng mô hình hóa dữ liệu trong
Database dưới dạng các object và tránh cho người dùng sự nhàm chán hoặc là
phức tạp khi phải viết những câu lệnh SQL trùng lặp.
2.3. Form nhập và kiểm tra (validate)
Yii tạo các form thu thập dữ liệu trở nên vô cùng dễ dàng và an toàn. Với
những hàm kiểm tra được đặt sẵn, như số, các phương thức hỗ trợ và widgets
làm đơn giản hóa các công việc kiểm tra form nhập dữ liệu.
Để thực hiện được việc này, hệ thống sử dụng bộ lọc filter. Filter là một
đoạn mã đã được cấu hình sẽ được thực hiện trước hoặc sau khi một bộ điều
khiển hành động thực thi. Ví dụ, một bộ lọc kiểm soát truy cập có thể được thực
hiện để đảm bảo rằng người dùng được xác thực trước khi thực hiện các hành
động được yêu cầu, một bộ lọc hiệu suất có thể được sử dụng để đo thời gian
trong việc thực hiện hành động.
publicfunctionfilterAccessControl($filterChain) {
// call $filterChain->run() to continue filter and action execution
}
$filterChain là một thể hiện của CFilterChain đại diện cho các danh sách
bộ lọc kết hợp với các hành động được yêu cầu. Bên trong một phương pháp
lọc, chúng ta có thể gọi filterChain-> run () để tiếp tục lọc và thực hiện hành
động.
Một bộ lọc cũng có thể là một thể hiện của CFilter hoặc lớp con của nó.
Các mã sau đây định nghĩa một lớp bộ lọc mới:
Trang
18
class PerformanceFilter extends Cfilter {
protectedfunctionpreFilter($filterChain) {
// biểu thức logic được áp dụng trước khi hành động được thực
thi
Return true;
tạo các giá trị thuộc tính của các đối tượng bộ lọc. Ở đây thuộc tính đơn vị của
PerformanceFilter sẽ được khởi tạo như là ''second''. Sử dụng các dấu cộng và
các dấu trừ từ các toán tử , chúng ta có thể chỉ định mà hành động bộ lọc nên và
không nên được áp dụng. Ở phía trên, postOnly nên được áp dụng để chỉnh sửa
và tạo ra hành động, trong khi đó PerformanceFilter nên được áp dụng cho tất cả
các hành động EXCEPT chỉnh sửa và tạo ra các hành động. Nếu không cộng
cũng không trừ xuất hiện trong cấu hình bộ lọc, bộ lọc sẽ được áp dụng cho tất
cả các hành động.
2.4. Các widget hỗ trợ Ajax(AJAX-enabled widgets)
Được tích hợp với Jquery, Yii đem tới một loạt các Ajax widget, ví dụ như
các trường tự động hoàn tất nhập liệu, xem dưới dạng cây, lưới dữ liệu, tất cả
cho phép viết những giao diện người dùng vô cùng đơn giản nhưng có tính tiện
lợi cao.
Widget là một trường hợp của Cwidget hoặc là một lớp con của nó. Nó là
một thành phần chủ yếu cho mục đích trình bày. Widget thường xuyên được
nhúng trong view để tạo ra một số giao diện người dùng phức tạp hơn. Ví dụ,
một lịch biểu Widget có thể được dùng để hoàn trả một lịch biểu giao diện
Trang
20
người dùng. Những Widget có khả năng tái sử dụng giao diện người sử dung tốt
hơn. Để sử dụng một Widget ta viết câu lệnh như sau:
<?php$this->beginWidget('path.to.WidgetClass'); ?>
Nội dung chính có thể được giữ lại bởi widge
<?php$this->endWidget(); ?>
Hoặc
<?php$this->widget('path.to.WidgetClass'); ?>
Những Widget có thể được cấu hình để tuỳ chỉnh các hành vi của nó. Điều
này đúng bởi các thiết lập giá trị thuộc tính cơ sở khi gọi hàm
CbaseController::beginWidget, sẽ muốn xác định chính mặt nạ được sử dụng.
Có thể làm như vậy bởi cách thiết lập một mảng những giá trị thuộc tính cơ sở
Trang
22
Giao diện là một màn hình hiển thị đặc biệt và thường được sử dụng để
trang trí view. Nó thường chứa các phần của giao diện người dùng. Ví dụ, một
giao diện có thể chứa phần tiêu đề và cuối trang và nhúng những nội dung hiển
thị ở giữa.
tiêu đề ở đây
// $content là nơi lưu trữ kết quả của nội dung hiển thị.
<? php echo $ content ; >
phần cuối trang
Giao diện là mặc nhiên được áp dụng khi gọi hàm render(). Theo mặc định,
hiển thị tập lênh trên giao diện như sau Protected/views / layouts/ main.php.
Điều này có thể được tuỳ chỉnh bởi sự thay đổi hoặc CwebApplication::layout
hoặc Ccontroller::layout. Để hàm hoàn trả lại 1 màn hình hiển thị không áp dụng
giao diện bạn gọi hàm RenderPartial().
2. 7. Web services
Yii hỗ trợ hệ thống tự động cho dịch vụ kỹ thuật phức tạp chuyên biệt
WSDL và quản lý việc xử lý yêu cầu của web services.
2. 8. Đa ngôn ngữ (I18N) và địa phương hóa (L10N)
Yii hỗ trợ dịch các đoạn tin, định dạng ngày, thời gian và địa phương hóa
giao diện. (Yii supports message translation, date and time d, number
formatting, and interface localization.)
Trang
23
2.9. Lớp hỗ trợ cache
Yii hỗ trợ cahe dữ liệu, cahe trang, cache mảng và dữ liệu động. Những
phương tiện hỗ trợ bộ đệm (cache) có thể được thay đổi dễ dàng mà không cần
phải động tới code của ứng dụng.
2.10. Xử lý lỗi và Log
Xử lý lỗi và thể hiện lỗi ngày càng tốt hơn, các tin log có thể được sắp xếp,
dụ có thể dùng code từ PEAR hoặc Zend Framework trong ứng dụng của Yii.
2.17. Tài liệu chi tiết
Mọi phương thức đơn lẻ hoặc thuộc tính đều được viết rõ ràng trong tài
liệu. Sách và hướng dẫn đầy đủ cũng có sẵn, cung cấp 1 hệ thống học Yii.
2.18. Hệ thống thư viện mở rộng
Yii cung cấp 1 hệ thống thư viện mở rộng bao gồm những thành phần do
người dùng đóng góp. Điều này giúp cho danh sách các tính năng không bao giờ
dừng lại.
Có thể thử dùng Yii bởi tốc độ, bảo mật,các tính năng đa dạng phong phú
và kỹ thuật tuyệt vời của nó. Nhưng sẽ sử dụng Yii lâu dài vì nó vô cùng trực
quan, linh hoạt và dễ sử dụng.
Trang
25