PHP "что-то вроде виджета" дизайн кода - PullRequest
1 голос
/ 13 января 2009

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

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

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

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

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

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

Я прав?

Ответы [ 2 ]

1 голос
/ 13 января 2009

Ответ на Ваш вопрос: Просмотр композиции .

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

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

// 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 с новым идентификатором категории.

1 голос
/ 13 января 2009

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

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

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

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

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