Рубрики
Uncategorized

Поговорим об архитектуре MVC фреймворка PHP

Автор оригинала: David Wong.

Предисловие

Прежде чем мы поговорим об архитектуре MVC, давайте поговорим о PHP-фреймворке. Многие люди, изучившие язык PHP, сталкиваются с различными фреймворками PHP. Что такое TP ah, Yi ah, Cyah, есть очень популярные laravel ah и так далее.

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

Интервью

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

Приведенные выше ответы в основном не являются вопросами, но действительно ли структура веб – сайта так проста? Очевидно, что нет.

Дизайн

Прежде чем мы поговорим об этом, давайте сначала рассмотрим один из шаблонов проектирования: шаблон посредника. Образ понимания таков: адаптер штекера порта и штекер состояния.

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

Ползучая яма

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

Но с макро-точки зрения веб-сайт-это не что иное, как больше запросов, больше форм, больше страниц и ничего больше. Почему?

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

Если вы использовали фреймворк Yii, вы будете знать, что самый простой способ-добавить слой формы запроса, код которого выглядит следующим образом:

class AuthController {
    public function login() {
        $FLogin = new loginForm();
        $FLogin->save();
    }
}

// Usually in separate folders
class loginForm {
    public function __construct() {
        $post = $_POST;
    }
    
    public function save() {
    }
}

Вышесказанное предназначено для решения проблемы формы формы в контроллере, что в принципе может облегчить многие проблемы с кодом.

Дивергенция

На уровне формы существует много подобных проблем, которые можно решить. Мы знаем, что на переднем конце есть фреймворк под названием vue. js, в котором упоминается концепция, называемая моделью MVVM.

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

Вот простой пример пользовательских центров, потому что часто здесь требуется нечто большее, чем просто таблица данных:

class AuthController {
    public function userCenterAction() {
        return new userVM();
    }
}

class userVM {
    public $user;
    public $orders;
    public $other;

    public function __construct() {
        $this->user = $this->getUser();
        $this->orders = $this->getOrders();

        $this->handle();
    }

    private function getUser() {
        return NULL;
    }

    private function getOrders() {
        return NULL;
    }

    private function handle() {
    }
}

В приведенном выше коде есть уровень виртуальной машины, который может поместить соответствующие коды сбора данных в соответствующие методы, а затем свободно объединить их в методе обработки. Это делает код в контроллере очень управляемым.

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

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

резюме

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

В последние несколько лет использовались различные фреймворки PHP, начиная от CI и заканчивая Symfony. Вам не нужно так много рамок, и вы не понимаете этих вещей. На самом деле, изучение программирования-это то же самое, что и изучение английского языка, здесь нет кратчайшего пути.

Больше пиши, больше думай, больше практикуйся…

Выше