Вопрос

У меня есть прототип веб-сайта, написанный на PHP.Недавно я переписал код, чтобы отделить логику от макета и операций с базой данных.Итак, теперь у меня есть что-то вроде дизайна кода MVC.

Теперь, что меня беспокоит, так это то, что в MVC у меня будет много файлов, и каждый из них будет отображать что-то в сочетании с другим (модель + вид + контроллер).Итак, я понял, что было бы полезно создать что-то вроде виджетов моих частей MVC.

Например, когда у меня есть MVC для просмотра продуктов, я бы создал PHP-файл, который объединяет файлы деталей MVC таким образом, чтобы отображать продукты на основе значений GET, которые я передаю в этот новый PHP-файл.

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

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

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

Я прав?

Это было полезно?

Решение

  

MVC У меня будет много файлов, и каждый будет отображать что-то в сочетании с другими (модель + вид + контроллер)

Похоже, вы не правильно поняли модель MVC. Только представления имеют контент или «отображают что-то».

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

Я бы порекомендовал прочитать краткий старт Zend_Layout .

Другие советы

Ответ на вашу проблему таков просмотр композиции.

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

Например.для статичной верхней панели это может быть специализированный вид.Для списка продуктов, который является динамическим, это может быть метод контроллера getProductsList($categoryId) это обеспечивает сложный вид.Предварительный просмотр продукта может быть осуществлен с помощью view helper.Смотрите следующий пример:

// inside class ProductsController
public function index($categoryId, $productId = null) {

    // specialised view
    $topBar = new TopBarView();
    $topBar->selected = 'products';

    // helper method
    $list = $this->getProductsList($categoryId);

    // helper object
    $previewHelper = new PreviewHelper($productId);
    $preview = $previewHelper->getView();

    // view composition
    $view = new View('path/to/template.tpl');
    $view->add($topBar);
    $view->add($list);
    $view->add($preview);
    return $view;

}

Это всего лишь пример, иллюстрирующий, как работает композиция.

Скрытое преимущество наличия метода доставки виджета (т.е.список продуктов) заключается в том, что его можно было бы повторно использовать для поддержки Ajax.Изменение категории потребовало бы вызова Ajax для getProductsList метод с новым идентификатором категории.

scroll top