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

pdf 24 trang phuongnguyen 10681
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ể

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:

  • pdfbai_giang_phat_trien_phan_mem_nguon_mo_bai_5_mo_hinh_mvc_tro.pdf