Khi nào nên sử dụng MVC


11

Tôi đang xây dựng một trang web với PHP và một phụ trợ MySQL. Nhưng, tôi hiện không sử dụng bất kỳ loại khung. Tôi có nên sử dụng Model View Controller không?


3
Bạn không nhất thiết phải sử dụng khung để sử dụng mẫu thiết kế MVC. Bạn có thể cấu trúc mã của riêng bạn để sử dụng MVC.
Amy Anuszewski

5
Bạn đang hỏi liệu bạn nên sử dụng một khung công tác hay bạn nên sử dụng phương pháp MVC nói chung?
Adam Lear

Câu trả lời:


11

Quy tắc của tôi:

bất kỳ trang nào truy cập cơ sở dữ liệu hoặc yêu cầu bất kỳ hình thức nhập nào của người dùng sẽ dễ quản lý hơn với cấu trúc MVC.

Bạn không nhất thiết phải đi theo toàn bộ khung, nếu trang web khá đơn giản, bạn có thể sử dụng lớp Trình điều khiển trang đơn giản cho mỗi trang yêu cầu nó ( xem bên trên ). Đây không phải là một giải pháp có thể mở rộng cho bạn - vì vậy hãy ghi nhớ các mục tiêu dài hạn của dự án.

Dưới đây là bản phác thảo sơ bộ về thiết lập PageControll (nhanh chóng bị hack):

index.php
--------------------------------------------------------

include 'Controller.php';
include 'Db.php';//db connection
include 'View.php';
$Controller = new MyController(new Db(), new View());
$Controller->route($_GET);
$Controller->render();


Controller.php
--------------------------------------------------------
class Controller($db){

    /* ensure all collaborators are provided */
    public function __construct(Db $db, View $view){
         $this->db = $db;
         $this->db->connect(array('host','db','user','pass'));
         $this->view = $view;
    }

    /* load the appropriate model data */
    public function route($_GET){
        //load the right model data and template
        switch($_GET){
            case $_GET['articles'] === 'cats':
                $this->vars = $this->db->get('cats');
                $this->template = 'cats.php';
                break;
            case $_GET['articles'] === 'dogs':
                break;
                $this->vars = $this->db->get('dogs');
                $this->template = 'dogs.php';
            default:
             $this->vars = array();
        }

    } 

    /* render an html string */
    public function render(){
        echo $this->view->render($this->template,$this->vars);
    }

}

View.php
------------------------------------------------------------
class View.php
    {
     /* return a string of html */
     public function render($template,$vars){
            // this will work - but you could easily swap out this hack for 
            // a more fully featured View class
            $this->vars = $vars;
            ob_start();
            include $template;
            $html = ob_get_clean();
            return $html;
         }

     }

template cats.php
--------------------------------------------------------
$html = '';
$row_template = '%name%,%breed%,%color%';
foreach($this->vars as $row){
    $html .= str_replace(
        array(%name%,%breed%,%color%),
        array($row['name'],$row['breed'],$row['color']),
        $row_template);
    }
echo $html;

Db.php
---------------------------------------------------------------
I haven't bothered writing a db class... you could just use PDO

3

Tôi sẽ nói rằng sẽ tốt nếu có cơ hội trang web có thể phát triển vượt quá quy mô không tầm thường. Lý do chính là bạn có được khả năng tốt hơn để thay đổi và duy trì trang web trong tương lai và bảo trì là phần lớn công việc trên hầu hết các dự án. Nó cung cấp cho bạn một sự tách biệt tốt đẹp của các mối quan tâm, tổ chức trang web và giúp tránh mã lặp đi lặp lại và lộn xộn.

MVC là một mô hình nổi tiếng và được chấp nhận cho các trang web và điều đó sẽ giúp ích nếu bạn đưa người khác vào dự án. Vì vậy, có lẽ bạn sẽ muốn chọn một khung đã thiết lập để bắt đầu.


1

Bạn đã không cung cấp bất kỳ chi tiết nào có thể giúp trả lời câu hỏi, nhưng đề xuất mặc định của tôi trong trường hợp đó là "có, sử dụng khung MVC". Đi với một giải pháp tùy chỉnh chỉ khi bạn thực sự chắc chắn rằng bạn cần nó.


1

Là một kiến ​​trúc, MVC tập trung vào việc chia dự án / trang web của bạn thành nhiều phần. Điều này có thể làm cho cuộc sống của bạn dễ dàng hơn khi bạn sẽ phải thay đổi một cái gì đó trong mã hoặc giao diện người dùng.

Nguyên tắc cơ bản, nếu bạn mong đợi những thay đổi về thông số kỹ thuật về dự án của bạn, đặc biệt là khi những thay đổi đó ảnh hưởng đến toàn bộ mã, thì hãy đi với kiến ​​trúc buộc bạn phải chia mã thành các mảnh lego nhỏ.


1

Không phải ở điểm này. Chờ cho đến khi trang web của bạn trở nên lớn hơn và lộn xộn hơn. Bạn sẽ tự hỏi - tôi có thể làm gì để mọi thứ bớt lộn xộn hơn? Bạn sẽ đọc một bài viết về MVC và bạn sẽ thích nó. Bạn sẽ không được hỏi có nên sử dụng nó hay không nữa. Bạn sẽ biết. Đó sẽ là thời điểm để bắt đầu sử dụng nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.