Дизайн кода PHP "что-то вроде виджета"
Вопрос
У меня есть прототип веб-сайта, написанный на 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
метод с новым идентификатором категории.