Tìm hiểu Mô hình MVC với PHP (Phần 1)

Mô hình lập trình Model-View-Controller (Viết tắt là MVC), ban đầu được  xây dựng vào cuối năm 1970, là một Mô hình kiến trúc phần mềm xây dựng trên cơ sở của giữ phần trình bày của dữ liệu tách biệt khỏi các phương thức tương tác với các dữ liệu.


Về lý thuyết, một hệ thống MVC tốt nên cho phép một lập trình viên Front end và một lập trình viên Back end làm việc trên cùng một hệ thống mà không can thiệp, chia sẻ, hoặc chỉnh sửa các tập tin đang làm việc.


Mặc dù mô hình MVC ban đầu được thiết kế cho máy tính cá nhân, nhưng nó đã được chuyển đổi và được sử dụng rộng rãi bởi lập trình web do nó nhấn mạnh vào việc tách biệt, gián tiếp, tái sử dụng mã.


Mô hình MVC khuyến khích phát triển hệ thống theo hướng mô-đun hóa, cho phép phát triển nhanh chóng, dễ dàng cập nhật, thêm, hoặc thậm chí loại bỏ chức năng.


Tìm hiểu về mô hình MVC với PHP (Phần 1)

Tìm hiểu về mô hình MVC với PHP (Phần 1)


Trong bài viết này, mình sẽ đi những nguyên tắc cơ bản của MVC, thử qua các định nghĩa của mô hình với một số ví dụ PHP đơn giản.


Điều này là chắc chắn là dễ hiểu cho cả những ai chưa bao giờ lập trình với MVC trước đó hoặc những người muốn tiếp tục hoàn thiện sự hiểu biết của mình về mô hình MVC.


1. Tìm hiểu rõ hơn về các thành phần của Mô hình MVC


Tên của mô hình đã mô tả 3 phần cốt lõi của nó: Model, View Controller.


Hãy xem biểu diễn chính xác và trực quan về mô hình MVC thông qua sơ đồ sau:



Mô hình MVC

Mô hình MVC


Hình ảnh cho thấy bố cục luồng dữ liệu duy nhất, cách thức mà nó truyền qua giữa mỗi thành phần và cuối cùng là mối quan hệ giữa từng thành phần hoạt động như thế nào.


1.1. Model trong MVC


Model là tên được đặt cho việc lưu trữ vĩnh viễn dữ liệu được sử dụng trong thiết kế tổng thể. Nó phải cho phép truy cập để dữ liệu được xem, hoặc được thu thập và ghi vào, và là cầu nối giữa thành phần View và thành phần Controller trong mẫu tổng thể.


Một khía cạnh quan trọng của Model là về mặt kỹ thuật "Blind" - điều này có nghĩa là mô hình này không có kết nối hoặc không biết những gì xảy ra với dữ liệu khi nó được chuyển đến các thành phần View hoặc Controller.


Nó không gọi cũng không tìm kiếm một phản hồi từ các bộ phận khác.


Mục đích duy nhất của nó là xử lý dữ liệu vào bộ lưu trữ vĩnh viễn hoặc tìm kiếm và chuẩn bị dữ liệu được chuyển qua các phần khác.


Tuy nhiên, Model không thể đơn giản được tóm tắt dưới dạng cơ sở dữ liệu hoặc cổng vào hệ thống khác, nơi xử lý dữ liệu.


Model phải đóng vai trò là người gác cổng cho chính dữ liệu, không hỏi gì ngoài việc chấp nhận tất cả các yêu cầu theo cách của nó. Thường là phần phức tạp nhất của hệ thống MVC, thành phần Model cũng là đỉnh cao của toàn bộ hệ thống vì không có nó có một kết nối giữa Controller và View.


1.2. View trong MVC



View là nơi dữ liệu, được yêu cầu từ Model, được view và đầu ra cuối cùng của nó được xác định. Theo truyền thống trong các ứng dụng web được xây dựng bằng MVC, View là một phần của hệ thống nơi HTML được tạo và hiển thị.


View cũng kích hoạt các tương tác từ người dùng, người dùng sau đó tiếp tục tương tác với Controller.


Ví dụ cơ bản về điều này là một nút được tạo bởi View, người dùng nhấp vào nút sẽ kích hoạt một hành động nào đó trong Controller.


Có một số quan niệm sai lầm về các thành phần View, đặc biệt là bởi các lập trình viên Web sử dụng mô hình MVC để xây dựng ứng dụng của họ.


Ví dụ: Nhiều người nhầm View là không có kết nối nào với Model và tất cả dữ liệu được hiển thị bởi View được truyền từ Controller. Trong thực tế, luồng này bỏ qua hoàn toàn lý thuyết đằng sau mô hình MVC.


Hơn nữa, mô tả View dưới dạng template file là không chính xác. Tuy nhiên, đây không phải là lỗi của một người mà là lỗi của vô số lập trình viên trước dẫn đến việc các lập trình viên hiện nay học MVC có thể sẽ không chính xác.


View thực sự không chỉ là một template, tuy nhiên các Framework lấy cảm hứng từ MVC hiện đại đã phá hỏng quan điểm gần như đến mức không ai thực sự quan tâm liệu một Framework có thực sự tuân thủ đúng mô hình MVC hay không.


Nó cũng rất quan trọng để nhớ rằng phần View không bao giờ được Controller cung cấp dữ liệu. Như mình đã đề cập khi thảo luận về Model, không có mối quan hệ trực tiếp giữa View và Controller mà không có Model ở giữa chúng.


1.3. Controller trong MVC


Thành phần cuối cùng của bộ ba MVC là Controller. Công việc của nó là xử lý dữ liệu mà người dùng nhập hoặc gửi và cập nhật Model tương ứng.


Điểm mấu chốt của Controller là người dùng. Không có người dùng tương tác, Controller không có tác dụng. Đây là phần duy nhất của mô hình mà người dùng nên tương tác.


Controller có thể được tóm tắt đơn giản như một bộ thu thập thông tin, sau đó chuyển nó đến Model để được tổ chức để lưu trữ và không chứa bất kỳ logic nào khác ngoài việc thu thập đầu vào.


Controller cũng chỉ được kết nối với một View duy nhất và với một Model duy nhất, biến nó thành một hệ thống luồng dữ liệu một chiều, với những cái bắt tay và đăng xuất tại mỗi điểm trao đổi dữ liệu.


Điều quan trọng cần nhớ là Controller chỉ được giao các tác vụ để thực hiện khi người dùng tương tác với View trước và mỗi chức năng của Controller là một trình kích hoạt, được đặt ra bởi sự tương tác của người dùng với View.


Lỗi phổ biến nhất của các lập trình viên web là nhầm lẫn Controller là một cổng và cuối cùng gán cho nó các chức năng và trách nhiệm mà View phải có (đây thường là kết quả của việc nhầm lẫn thành phần View như một Template).


Ngoài ra, một lỗi phổ biến là cung cấp các chức năng cho Copntroller để chịu trách nhiệm như chuyển và xử lý dữ liệu từ Model sang View.


=> Trong mô hình MVC, mối quan hệ này phải được giữ giữa Model và View. Chứ không phải là nhiệm vụ của Controller.



2. Ví dụ về mô hình MVC trong PHP



Bạn hoàn toàn có thể xây dựng trang web PHP trên Mô hình MVC. Nhưng trước tiên, dưới đây là một ví dụ đơn giản giúp bạn hiểu về MVC hơn:


<?php
class Model
{
    public $string;

    public function __construct(){
        $this->string = "MVC + PHP = Awesome!";
    }
}
<?php
class View
{
    private $model;
    private $controller;

    public function __construct($controller,$model) {
        $this->controller = $controller;
        $this->model = $model;
    }
 
    public function output(){
        return "<p>" . $this->model->string . "</p>";
    }
}
<?php
class Controller
{
    private $model;

    public function __construct($model) {
        $this->model = $model;
    }
}

Chúng ta bắt đầu với một số class cơ bản cho mỗi phần của các mô hình. Bây giờ, chúng ta cần thiết lập các mối quan hệ giữa chúng:


<?php
$model = new Model();
$controller = new Controller($model);
$view = new View($controller, $model);
echo $view->output();
Như bạn có thể thấy trong ví dụ trên, chúng ta không có function dành riêng cho Controller vì chúng ta không có bất kỳ tương tác người dùng nào được xác định với ứng dụng của chúng ta. Chế độ View giữ tất cả các chức năng như ví dụ hoàn toàn dành cho mục đích hiển thị.


Bây giờ, hãy mở rộng ví dụ để hiển thị cách chúng tôi sẽ thêm chức năng vào Controller, từ đó thêm tính tương tác vào ứng dụng:


<?php
class Model
{
    public $string;

    public function __construct(){
        $this->string =MVC + PHP = Awesome, click here!;
    }

}

<?php
class View
{
    private $model;
    private $controller;

    public function __construct($controller,$model) {
        $this->controller = $controller;
        $this->model = $model;
    }

    public function output() {
        return '<p><a href="mvc.php?action=clicked"' . $this->model->string . "</a></p>";
    }
}

<?php
class Controller
{
    private $model;

    public function __construct($model){
        $this->model = $model;
    }

    public function clicked() {
        $this->model->string = “Updated Data, thanks to MVC and PHP!}
}

Chúng ta đã cải tiến ứng dụng với một số chức năng cơ bản. Thiết lập mối quan hệ giữa các thành phần của chúng ta, bây giờ trông nó như thế này:


<?php
$model = new Model();
$controller = new Controller($model);
$view = new View($controller, $model);

if (isset($_GET['action']) && !empty($_GET['action'])) {
    $controller->{$_GET['action']}();
}

echo $view->output();
Chạy đoạn code trên và khi bạn click vào liên kết, bạn sẽ có thể thấy chuỗi thay đổi dữ liệu của nó.


Tổng kết



Trong bài này, chúng ta đã đề cập đến lý thuyết cơ bản đằng sau mô hình MVC và đã tạo ra một ứng dụng MVC rất cơ bản, nhưng chúng ta vẫn còn một chặng đường dài trước khi chúng ta thực sự làm được chức năng khó nào.


>> Trong Khóa học PHP Fullstackhttps://niithanoi.edu.vn/lap-trinh-web-php.html bạn sẽ được tìm hiểu kỹ để Lập trình web PHP với Mô hình MVC.


Trong bài Tìm hiểu Mô hình MVC với PHP phần 2, mình sẽ đề cập đến một số lựa chọn mà bạn gặp phải khi cố gắng tạo một ứng dụng MVC thực sự trên web bằng PHP. Hãy chờ xem nhé!
Tìm hiểu Mô hình MVC với PHP (Phần 1) Tìm hiểu Mô hình MVC với PHP (Phần 1) Reviewed by Developer Land on tháng 12 12, 2019 Rating: 5

Không có nhận xét nào:

Được tạo bởi Blogger.