Bài giảng Phát triển phần mềm nguồn mở - Bài 5: Mô hình MVC trong PHP - Nguyễn Hữu Thể
Nội dung
❑Mô hình MVC
❑Ưu và nhược điểm của mô hình MVC
❑Phát triển ứng dụng Web theo mô hình MVC
❑Tài liệu tham khảo
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phát triển phần mềm nguồn mở - Bài 5: Mô hình MVC trong PHP - Nguyễn Hữu Thể", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Phát triển phần mềm nguồn mở - Bài 5: Mô hình MVC trong PHP - Nguyễn Hữu Thể
MÔ HÌNH MVC TRONG PHP NGUYỄN HỮU THỂ 12/31/2018 1 Nội dung ❑Mô hình MVC ❑Ưu và nhược điểm của mô hình MVC ❑Phát triển ứng dụng Web theo mô hình MVC ❑Tài liệu tham khảo 2 12/31/2018 1. Model View Controller (MVC) 1. Mô hình MVC − MVC: một kiến trúc phần mềm (hay mô hình thiết kế) được sử 2. Ưu/nhược điểm dụng trong kỹ thuật phần mềm. 3. Ứng dụng MVC (1) − Tách một ứng dụng web ra làm 3 thành phần đảm nhiệm chức 4. Ứng dụng MVC (2) năng tách biệt, thuận tiện cho việc xử lý và bảo trì. 3 3 3 1. Model View Controller (MVC) 1. Mô hình MVC − Model: Quản lý dữ liệu, lưu trữ và truy xuất các dữ liệu từ cơ sở 2. Ưu/nhược điểm dữ liệu, các logic xử lý. 3. Ứng dụng MVC (1) − View: Hiển thị dữ liệu đã được truy xuất từ model. 4. Ứng dụng MVC (2) − Controller: Trung gian, giúp cho model và view tương tác với nhau. • Controller nhận request từ client. • Gọi các model để thực hiện các yêu cầu và gửi ra View. • View sẽ format lại data từ controller gửi ra và trình bày dữ liệu (HTML). 4 4 4 2. Ưu và nhược điểm của MVC 1. Mô hình MVC ❖ Ưu điểm: 2. Ưu/nhược điểm 3. Ứng dụng MVC (1) − Thể hiện tính chuyên nghiệp trong lập trình, phân tích 4. Ứng dụng MVC (2) thiết kế. − Phát triển ứng dụng theo cấu trúc đơn giản, dễ nâng cấp, bảo trì, triển khai. => Sử dụng phổ biến nhất trong các PHP Framework ❖ Nhược điểm: − Tốn nhiều thời gian để xây dựng thư viện, cấu trúc. − Yêu cầu về chuyên môn khá cao, có kiến thức vững về các mô hình chuẩn. 5 5 5 3. Thiết kế ứng dụng Web theo mô hình MVC 1. Mô hình MVC − Cấu trúc ứng dụng MVC: 2. Ưu/nhược điểm 3. Ứng dụng MVC (1) 3.1 Trang chủ 3.2 Controller 3.3 Model 3.4 View 4. Ứng dụng MVC (2) 6 6 6 index.php 1. Mô hình MVC − Controller: nơi đầu tiên nhận các yêu cầu (request). 2. Ưu/nhược điểm − Controller được gọi từ file index.php. 3. Ứng dụng MVC (1) 3.1 Trang chủ 3.2 Controller index.php 3.3 Model <?php 3.4 View include_once("controller/Controller.php"); 4. Ứng dụng MVC (2) $controller = new Controller(); $controller->invoke(); 7 7 7 <?php include_once("model/StudentModel.php"); Controller.php class Controller { private $modelStudent; 1. Mô hình MVC public function __construct(){ 2. Ưu/nhược điểm $this->modelStudent = new StudentModel(); 3. Ứng dụng MVC (1) } public function invoke(){ 3.1 Trang chủ if (!isset($_GET['id'])){ 3.2 Controller $students = $this->modelStudent->getStudentList(); 3.3 Model include 'view/student-list.php'; 3.4 View } 4. Ứng dụng MVC (2) else{ $student = $this->modelStudent->getStudent($_GET['id']); include 'view/c'; } } } ▪ Contructor: gọi và khởi tạo lớp Model. ▪ Invoke: quyết định data nào được phép trả ra từ model => gọi model 8 để lấy dữ liệu => gửi dữ liệu ra view. 8 8 MVC Sequence Diagram 1. Mô hình MVC 2. Ưu/nhược điểm 3. Ứng dụng MVC (1) 3.1 Trang chủ 3.2 Controller 3.3 Model 3.4 View 4. Ứng dụng MVC (2) 9 9 9 include_once("model/Student.php"); StudentModel.php class StudentModel { 1. Mô hình MVC public function getStudentList(){ 2. Ưu/nhược điểm return array( "01" => new Student("01", "Nguyễn Đình A", "15-06-2000","Nam", "Vĩnh Long"), 3. Ứng dụng MVC (1) "02" => new Student("02", "Nguyễn Đình B", "16-06-2000","Nam", "Vĩnh Long"), 3.1 Trang chủ "03" => new Student("03", "Nguyễn Văn C", "17-06-2000","Nam", "Cần Thơ"), 3.2 Controller "04" => new Student("04", "Nguyễn Văn D", "18-06-2000","Nam", "Cần Thơ") 3.3 Model ); 3.4 View } 4. Ứng dụng MVC (2) public function getStudent($id){ $allBooks = $this->getStudentList(); return $allBooks[$id]; } } − Model đại diện cho dữ liệu và logic của ứng dụng, thường hay gọi là business logic. 10 10 class Student { Student.php private $id; private $name; private $birthday; 1. Mô hình MVC private $gender; 2. Ưu/nhược điểm private $address; 3. Ứng dụng MVC (1) public function getID(){ 3.1 Trang chủ return $this->id; 3.2 Controller } 3.3 Model public function getName(){ return $this->name; 3.4 View } public function __construct($id, $name, 4. Ứng dụng MVC (2) public function getBirthday(){ $birthday, $gender, $address){ return $this->birthday; $this->id = $id; } $this->name = $name; public function getGender(){ return $this->gender; $this->birthday = $birthday; } $this->gender = $gender; public function getAddress(){ $this->address = $address; return $this->address; } } } 11 11 View 1. Mô hình MVC − View: định đạng lại dữ liệu nhận được từ model. 2. Ưu/nhược điểm − Trình bày nhiều dạng dữ liệu (xml, json, array,). 3. Ứng dụng MVC (1) 3.1 Trang chủ view/student.php 3.2 Controller 3.3 Model Mã sốgetID()?> 3.4 View Họ và têngetName()?> 4. Ứng dụng MVC (2) Ngày sinhgetBirthday()?> Giới tínhgetGender()?> Địa chỉgetAddress()?> 12 12 12 view/student-list.php 1. Mô hình MVC Mã sốHọ và tênNgày sinhĐịa chỉ 2. Ưu/nhược điểm <?php 3. Ứng dụng MVC (1) foreach ($students as $list => $student){ 3.1 Trang chủ echo ‘ getID().'">'.$student->getID().' 3.2 Controller '.$student->getName().' 3.3 Model '.$student->getBirthday().' 3.4 View '.$student->getAddress().' 4. Ứng dụng MVC (2) '; } ?> 13 13 13 Demo 1. Mô hình MVC 2. Ưu/nhược điểm 3. Ứng dụng MVC (1) View: student-list.php 3.1 Trang chủ 3.2 Controller 3.3 Model 3.4 View 4. Ứng dụng MVC (2) View: student.php 14 14 14 ỨNG DỤNG MVC CÓ DATABASE 1. Mô hình MVC 2. Ưu/nhược điểm ❑ Cấu trúc ứng dụng 1: ❑ Cấu trúc ứng dụng 2: 3. Ứng dụng MVC (1) bổ sung database 4. Ứng dụng MVC (2) 4.1 Trang chủ 4.2 Controller 4.3 Model 4.4 View ✓ File Database.php có thể lưu ở 1 thưc mục khác, VD: library 15 15 15 Bổ sung lớp Database.php Chứa phương thức kết nối/ hủy kết nối đến database class Database { private $connection; public function getConnection() { if (! ($this->connection)) { $this->connection = mysqli_connect ( 'localhost', 'root', '', 'mvc_student' ) or die ( 'Không thể kết nối CSDL' ); mysqli_set_charset ( $this->connection, 'utf8' ); } return $this->connection; } public function closeConnection() { if ($this->connection) { mysqli_close ( $this->connection ); } } } 16 16 16 ❑ Ứng dụng 1: ❑ Ứng dụng 2: index.php index.php <?php <?php include_once("controller/Controller.php"); include_once("controller/Controller.php"); $controller = new Controller(); $controller = new Controller(); $controller->invoke(); $controller->invoke(); 17 17 17 ❑ Ứng dụng 1: ❑ Ứng dụng 2: Controller.php Controller.php include_once("model/StudentModel.php"); include_once("model/Database.php"); include_once("model/StudentModel.php"); class Controller { class Controller { private $modelStudent; private $modelStudent; public function __construct(){ public function __construct(){ $this->modelStudent = new $this->modelStudent = new StudentModel(); StudentModel((new Database())->getConnection()); } } public function invoke(){ public function invoke(){ if (!isset($_GET['id'])){ if (!isset($_GET['id'])){ $students = $this->modelStudent- $students = $this->modelStudent- >getStudentList(); >getStudentList(); include 'view/student-list.php'; include 'view/student-list.php'; } } else{ else{ $student = $this->modelStudent- $student = $this->modelStudent- >getStudent($_GET['id']); >getStudent($_GET['id']); include 'view/student.php'; include 'view/student.php'; } } } } } } 18 18 ❑ Ứng dụng 1: ❑ Ứng dụng 2: StudentModel.php StudentModel.php include_once("model/Student.php"); include_once("model/Student.php"); class StudentModel { class StudentModel { public function getStudentList(){ private $connection; public function __construct($db) { return array( $this->connection = $db; "01" => new Student("01", "Nguyễn Đình } A", "15-06-2000","Nam", "Vĩnh Long"), function getStudentList() { "02" => new Student("02", "Nguyễn Đình $sql = "Select * from Student"; B", "16-06-2000","Nam", "Vĩnh Long"), $result = mysqli_query ( $this->connection, $sql ); "03" => new Student("03", "Nguyễn Văn C", while ( $row = mysqli_fetch_array ( $result ) ) { "17-06-2000","Nam", "Cần Thơ"), $data [] = new Student($row["id"], "04" => new Student("04", "Nguyễn Văn $row["name"],$row["birthday"],$row["gender"],$row["address"]); D", "18-06-2000","Nam", "Cần Thơ") } ); return $data; } } function getStudent($id) { public function getStudent($id){ $sql = "Select * from Student where id = $id"; $allBooks = $this->getStudentList(); $result = mysqli_query ( $this->connection, $sql ); return $allBooks[$id]; if (mysqli_num_rows ( $result ) > 0) { } $row = mysqli_fetch_assoc ( $result ); } $student = new Student($row["id"], $row["name"],$row["birthday"],$row["gender"],$row["address"]); return $student; } return null; } } 19 ❑ Ứng dụng 1: ❑ Ứng dụng 2: Student.php Student.php class Student { class Student { private $id; private $id; private $name; private $name; private $birthday; private $birthday; private $gender; private $gender; private $address; private $address; public function getID(){ public function getID(){ return $this->id; return $this->id; } } public function getName(){ public function getName(){ return $this->name; return $this->name; } } public function getBirthday(){ public function getBirthday(){ return $this->birthday; return $this->birthday; } } public function getGender(){ public function getGender(){ return $this->gender; return $this->gender; } } public function getAddress(){ public function getAddress(){ return $this->address; return $this->address; } } public function __construct($id, $name, $birthday, $gender, $address){ public function __construct($id, $name, $birthday, $gender, $address){ $this->id = $id; $this->id = $id; $this->name = $name; $this->name = $name; $this->birthday = $birthday; $this->birthday = $birthday; $this->gender = $gender; $this->gender = $gender; $this->address = $address; $this->address = $address; } } 20 } } 20 ❑ Ứng dụng 1: ❑ Ứng dụng 2: view/student.php view/student.php Mã sốgetID()?> Mã sốgetID()?> Họ và têngetName()?> Họ và têngetName()?> Ngày sinhgetBirthday()?> Ngày sinh Giới tínhgetGender()?> getBirthday()))?> Địa chỉgetAddress()?> Giới tínhgetGender()?> Địa chỉgetAddress()?> 21 21 21 ❑ Ứng dụng 1: ❑ Ứng dụng 2: view/student-list.php view/student-list.php Mã số Mã số Họ và tên Họ và tên Ngày sinh Ngày sinh Địa chỉ Địa chỉ <?php <?php foreach ($students as $list => $student){ foreach ($students as $student){ echo echo ' ‘ getID().'">'.$student- getID().'">'.$student- >getID().' >getID().' '.$student->getName().' '.$student->getName().' '.date('d-m-Y', strtotime($student->getBirthday())).' '.$student->getBirthday().' '.$student->getAddress().' '.$student->getAddress().' '; '; } } ?> ?> 22 22 22 Demo View: student-list.php View: student.php 23 23 Tài liệu tham khảo 1. Mô hình MVC 1. 5/6/2018. ư 2. Ưu/nh ợc điểm 2. https://whatis.techtarget.com/definition/model-view-controller-MVC, 5/6/2018 3. Ứng dụng MVC (1) 3. https://www.tutorialspoint.com/mvc_framework/mvc_framework_introduction.htm 4. Ứng dụng MVC (2) 4. https://laravel.com/docs, 6/6/2018. Tài liệu tham khảo 5. https://www.w3schools.com/css/css_table.asp, 6/6/2018. 24 24 24
File đính kèm:
- bai_giang_phat_trien_phan_mem_nguon_mo_bai_5_mo_hinh_mvc_tro.pdf