Chương 7 Mô hình PHP MVC thuộc bài giảng mã nguồn mở nhằm trình bày về khái niệm về kiến trúc phần mềm, tổng quan về kiến trúc 3 lớp, tổng quan về kiến trúc MVC, so sánh MVC và 3 lớp, xây dựng website PHP MVC đơn giản, Framework MVC cho website PHP.
Môn Các Hệ Thống Mã Nguồn Mở Chương : MƠ HÌNH PHP MVC Giảng viên : ThS Nguyễn Minh Thành Email : thanhnm@itc.edu.vn Môn Các Hệ Thống Mã Nguồn Mở Nội Dung Khái niệm kiến trúc phần mềm Tổng quan kiến trúc lớp Tổng quan kiến trúc MVC So sánh MVC lớp Xây dựng website PHP MVC đơn giản Framework MVC cho website PHP Môn Các Hệ Thống Mã Nguồn Mở Khái niệm kiến trúc phần mềm “Kiến trúc phần mềm chương trình hệ thống tính tốn cấu trúc cấu trúc hệ thống đó, gồm thành phần phần mềm, thuộc tính trơng thấy từ bên ngồi thành phần này, mối quan hệ chúng.” Phát triển phần mềm theo kiến trúc định giúp cho việc quản lý hệ thống tốt tận dụng tài nguyên hệ thống hiệu Đồng thời dễ bảo trì mở rộng Môn Các Hệ Thống Mã Nguồn Mở Tổng quan mơ hình lớp Để dễ quản lý thành phần hệ thống, không bị ảnh hưởng thay đổi, người ta hay nhóm thành phần có chức lại với phân chia trách nhiệm cho nhóm để cơng việc không bị chồng chéo ảnh hưởng lẫn Một mơ hình lập trình Mơ hình lớp (Three Layers) Mơn Các Hệ Thống Mã Nguồn Mở Các thành phần 3-Layer Mơ hình lớp cấu thành từ: Presentation Layers, Business Logic Layers, Data Access Layers Môn Các Hệ Thống Mã Nguồn Mở Cách vận hành mơ hình Đối với 3-Layer, u cầu xử lý qua layer hình - Đầu tiên User giao tiếp với Presentation Layers (GUI) để gửi thông tin yêu cầu Tại layer này, thông tin kiểm tra, OK chúng chuyển xuống Business Logic Layer (BLL) - Tại BLL, thơng tin nhào nặn, tính tốn theo u cầu gửi, khơng cần đến Database BLL gửi trả kết GUI, ngược lại đẩy liệu (thơng tin xử lý) xuống Data Access Layer (DAL) - DAL thao tác với Database trả kết cho BLL, BLL kiểm tra gửi lên GUI để hiển thị cho người dùng - Một gặp lỗi (các trường hợp khơng liệu) layer quăng lên layer cao bậc GUI quăng cho người dùng biết - Các liệu trung chuyển Layer thông qua đối tượng gọi Data Transfer Object (DTO), đơn giản Class đại diện cho đối tượng lưu trữ Database Tổ chức mơ hình 3-Layer Có nhiều cách đặt tên cho thành phần lớp như: Cách 1: GUI, BUS, DAL Cách 2: GUI, BLL, DAO, DTO Cách 3: Presentation, BLL, DAL Môn Các Hệ Thống Mã Nguồn Mở Tổng quan mơ hình MVC • MVC mơ hình phát triển phần mềm chun giành cho website Môn Các Hệ Thống Mã Nguồn Mở Các Thành Phần Trong MVC • Trong kiến trúc này, hệ thống chia thành tầng tương ứng với tên gọi (Model – View – Controller) Ở nhiệm vụ cụ thể tầng phân chia sau: Model (Tầng liệu): đối tượng tập hợp đối tượng biểu diễn cho phần liệu chương trình Nó giao nhiệm vụ cung cấp liệu cho sở liệu lưu liệu vào kho chứa liệu Tất nghiệp vụ logic thực thi Model Dữ liệu vào từ người dùng thông qua View đến Controller kiểm tra Model trước lưu vào sở liệu Việc truy xuất, xác nhận, lưu liệu phần Model Môn Các Hệ Thống Mã Nguồn Mở Các Thành Phần Trong MVC • View (Tầng giao diện): phần giao diện với người dùng, bao gồm việc liệu hình, cung cấp menu, nút bấm, hộp đối thoại, chọn lựa …, để người dùng thêm, xóa sửa, tìm kiếm làm thao tác khác liệu hệ thống Thông thường, thông tin cần hiển thị lấy từ thành phần Models Controller (Tầng điều khiển): phần điều khiển ứng dụng, điều hướng nhiệm vụ (task) đến phương thức (method) có chức xử lý nhiệm vụ Nó chịu trách nhiệm xử lý tác động mặt giao diện, thao tác models, cuối chọn view thích hợp để hiển thị hình Mơn Các Hệ Thống Mã Nguồn Mở 10 Ưu – nhược điểm • Ưu điểm: Phát triển phần mềm: Có tính chun nghiệp hóa, chia cho nhiều nhóm đào tạo nhiều kỹ khác nhau, từ thiết kế mỹ thuật lập trình đến tổ chức database Giúp phát triển ứng dụng nhanh, đơn giản, dễ nâng cấp Bảo trì: Với lớp phân chia theo nói, thành phần hệ thống dễ thay đổi, thay đổi cô lập lớp, ảnh hưởng đến lớp gần kề nó, khơng phát tán náo loạn chương trình Mở rộng: Với lớp chia theo ba lớp nói, việc thêm chức vào cho lớp dễ dàng phân chia theo cách khác Nhược điểm: Đối với dự án nhỏ việc áp dụng mơ hình MC gây cồng kềnh, tốn thời gian trình phát triể Tốn thời gian trung chuyển liệu tầng Môn Các Hệ Thống Mã Nguồn Mở 28 Framework MVC cho website PHP • Bước : Tạo file index.php thư mục public để định nghĩa gọi file bootstrap.php Môn Các Hệ Thống Mã Nguồn Mở 29 Framework MVC cho website PHP • Bước : Tạo file bootstrap.php thư mục library File gọi file cấu hình file khác Môn Các Hệ Thống Mã Nguồn Mở 30 Framework MVC cho website PHP • Bước : Tạo file config.php routing.php thư mục config Môn Các Hệ Thống Mã Nguồn Mở 32 Framework MVC cho website PHP • Bước : Tạo file shared.php, file phân tích request gọi controller tương ứng /** Main Call Function **/ function callHook() { global $url; $urlArray = array(); $urlArray = explode("/",$url); $controller = $urlArray[0]; array_shift($urlArray); $action = $urlArray[0]; array_shift($urlArray); $queryString = $urlArray; $controllerName = $controller; $controller = ucwords($controller); $model = rtrim($controller, 's'); $controller = 'Controller'; $dispatch = new $controller($model,$controllerName,$action); if ((int)method_exists($controller, $action)) { call_user_func_array(array($dispatch,$action),$queryString); } else { /* Error Generation Code Here */ } } callHook(); Môn Các Hệ Thống Mã Nguồn Mở 33 Framework MVC cho website PHP • Bước : file shared.php cịn chứa hàm autoload từ động tìm kiếm khai báo lớp có đối tượng tạo function autoload($className) { if (file_exists(ROOT DS 'library' DS strtolower($className) '.class.php')) { require_once(ROOT DS 'library' DS strtolower($className) '.class.php'); } else if (file_exists(ROOT DS 'application' DS 'controllers' DS strtolower($className) '.php')) { require_once(ROOT DS 'application' DS 'controllers' DS strtolower($className) '.php'); } else if (file_exists(ROOT DS 'application' DS 'models' DS strtolower($className) '.php')) { require_once(ROOT DS 'application' DS 'models' DS strtolower($className) '.php'); } else { /* Error Generation Code Here */ echo "Can not load class {$className}."; } } Môn Các Hệ Thống Mã Nguồn Mở 34 Framework MVC cho website PHP • Bước : ta xây dựng đối tượng mô hình MVC Các controller kế thừa từ lớp Controller gốc chứa file library/controller.php class Controller { protected $_model; protected $_controller; protected $_action; protected $_template; function construct($model, $controller, $action) { $this->_controller = $controller; $this->_action = $action; $this->_model = $model; $this->_template = new Template($controller,$action); } function set($name,$value) {$this->_template->set($name,$value); } function destruct() { } $this->_template->render(); } Môn Các Hệ Thống Mã Nguồn Mở 35 Framework MVC cho website PHP • Bước : Controller có gọi lớp Template lớp thực việc render nội dung với view tương ứng class Template { protected $variables = array(); protected $_controller; //tacgias protected $_action; //viewall function construct($controller,$action) { $this->_controller = $controller; $this->_action = $action; } function set($name,$value) { $this->variables[$name] = $value; } function render() { … } } Môn Các Hệ Thống Mã Nguồn Mở 36 Framework MVC cho website PHP • Bước : lớp Controller theo ứng dụng Ví dụ : TacgiasController (trong thư mục application/controllers) Môn Các Hệ Thống Mã Nguồn Mở 38 Framework MVC cho website PHP • Bước : lớp TacgiasController có gọi tạo lớp Tacgia (lớp model) thư mục application/models/tacgia.php Các lớp model thực chất lớp kết nối CSDL để lấy liệu theo câu truy vấn Môn Các Hệ Thống Mã Nguồn Mở 39 Framework MVC cho website PHP • Bước : lớp Model cha (trong library) class Model extends SQLQuery { protected $_model; function construct() { $this>connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME); $this->_model = get_class($this); //$this->_table = strtolower($this->_model)."s"; $this->_table = strtolower($this->_model); } function destruct() { $this->disconnect(); } } Môn Các Hệ Thống Mã Nguồn Mở 40 Framework MVC cho website PHP • Bước : lớp SqlQuery gốc (trong library)