Когда использовать MVC

11

Я строю сайт с PHP и MySQL бэкэнд. Но в настоящее время я не использую какие-либо рамки. Должен ли я использовать Model View Controller?

Райан
источник
3
Вам не обязательно использовать каркас для использования шаблона проектирования MVC. Вы можете структурировать свой собственный код для использования MVC.
Эми Анушевски
5
Вы спрашиваете, следует ли вам использовать каркас или использовать подход MVC в целом?
Адам Лир

Ответы:

11

Мое эмпирическое правило:

Любая страница, которая попадает в базу данных или требует какой-либо формы пользовательского ввода, будет легче управлять с помощью структуры MVC.

Вам не обязательно использовать целую платформу, если сайт довольно прост, вы можете использовать простой класс Page Controller для каждой страницы, для которой он требуется ( см. Выше ). Имейте в виду, что это не масштабируемое решение, так что имейте в виду долгосрочные цели проекта.

Вот примерный набросок (быстро взломанный вместе) установки PageController:

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
sunwukung
источник
3

Я бы сказал, что было бы хорошо, если бы был шанс, что сайт может вырасти за пределы нетривиального размера. Основная причина в том, что вы получаете лучшую возможность изменять и поддерживать сайт в будущем, а обслуживание - это большая часть работы над большинством проектов. Это дает вам хорошее разделение проблем, организацию сайта и помогает избежать повторяющихся и запутанных кодов.

MVC - это шаблон, хорошо известный и принятый для веб-сайтов, который поможет вам привлечь других людей в проект. Для этого вы, вероятно, захотите выбрать установленную основу для начала.

тюремщик
источник
1

Вы не предоставили каких-либо подробностей, которые могли бы помочь ответить на вопрос, но моя рекомендация по умолчанию в таком случае - «да, используйте инфраструктуру MVC». Используйте нестандартное решение только тогда, когда вы действительно уверены, что оно вам нужно.

Адам Быртек
источник
1

Как архитектура, MVC фокусируется на разделении вашего проекта / веб-страницы на несколько частей. Это может облегчить вашу жизнь, когда вам придется что-то изменить в коде или пользовательском интерфейсе.

Основное правило: если вы ожидаете изменений в спецификациях вашего проекта, особенно когда эти изменения влияют на весь код, тогда используйте архитектуру, которая заставляет вас разбивать код на крошечные фрагменты lego.

Танос Папатанасиу
источник
1

Не в этот момент. Подождите, пока ваш сайт не станет больше и грязнее. Вы спросите себя - что я могу сделать, чтобы сделать вещи менее беспорядочными? Вы прочтете статью о MVC и вам это понравится. Вы не будете сомневаться, использовать ли его больше или нет. Ты узнаешь. Это был бы момент, чтобы начать использовать его.

Эмануил Русев
источник