Использовать представления или не использовать представления

StackOverflow https://stackoverflow.com/questions/37731

  •  09-06-2019
  •  | 
  •  

Вопрос

Я, кажется, сейчас вовлечен в дебаты с другим программистом по этому проекту, который считает, что у представлений нет никаких достоинств. Он предлагает систему, в которой PHP выглядит примерно так:

$draw = new Draw;
$nav = $draw->wideHeaderBox().
$draw->left().
    $draw->image().
        Image::get($image,60,array('id'=>'header_image')).
    $draw->imageEnd().
$draw->leftEnd().
$draw->left(10).
    '<div id="header_text">'.
        self::defaultSectionText().
    '</div>'.
$draw->leftEnd().

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

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

Решение

HTML-экономия времени полезна, но она полезна только тогда, когда она интуитивно понятна и проста для понимания. Необходимость создания нового Draw просто звучит не очень естественно. Кроме того, wideHeaderBox и left будут иметь значение только для тех, кто глубоко знает систему. А что если является редизайном, как ваши коллеги по музыке? Что если wideHeaderBox станет очень узким? Измените ли вы разметку (и стили, предположительно), генерируемые методом PHP, но оставите очень неточное имя метода для вызова кода?

Если вы, ребята, просто имеете для использования генерации HTML, вы должны использовать его с вкраплениями в файлах представления, и вы должны использовать его там, где это действительно необходимо / полезно, например что-то вроде этого:

HTML::link("Wikipedia", "http://en.wikipedia.org");
HTML::bulleted_list(array(
    HTML::list_item("Dogs"),
    HTML::list_item("Cats"),
    HTML::list_item("Armadillos")
));

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

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

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

Я бы предложил использовать больше шаблонного дизайна. Сделайте всю свою бизнес-логику в PHP, настройте все переменные, которые нужны вашей странице. Затем просто сделайте так, чтобы ваша разметка страницы ссылалась на эти переменные (и не имела никакого отношения к бизнес-логике).

Вы смотрели на ум? http://smarty.php.net

Я делал что-то подобное в прошлом, и это была пустая трата времени. Например, вам нужно написать обертки для всего, что вы уже можете использовать с HTML, и вы забудете некоторые вещи. Когда вам нужно что-то изменить в макете, вы подумаете: «Стреляй, я забыл об этом ... теперь я должен написать другой метод или добавить другой параметр».

В конечном итоге, у вас будет огромная коллекция функций / классов, генерирующих HTML, которые никто не будет знать или помнить, как использовать месяцы спустя. Новые разработчики будут проклинать вас за использование этой системы, поскольку им придется изучить ее, прежде чем что-либо менять. Напротив, больше людей, вероятно, знают HTML, чем ваши абстрактные классы рисования HTML ... и иногда вам просто нужно запачкать руки чистым HTML!

Если честно, это выглядит довольно многословно, и за ним трудно следовать, а часть кода выглядит так, как будто это очень много информации о макете.

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

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

Мне всегда намного проще работать напрямую с html. Существует еще один слой абстракции (html -> фактическая веб-страница / функция php - > html -> фактическая веб-страница), с которым вы можете работать, тогда вы просто работаете в HTML.

Я действительно думаю, что «просто нужно изменить это в одном месте» в этом случае не сработает. Это потому, что они будут так много раз, когда вы захотите изменить вывод функции, но только в одном месте. Конечно, вы можете использовать аргументы, но вскоре вы получите несколько функций с дюжиной аргументов. Тьфу.

Помните, что языки / системы шаблонов часто позволяют вам включать суб-шаблоны, что позволяет вам иметь несколько повторно используемых блоков HTML.

Суть в том, что если бы я только начинал в вашей компании и видел такой код везде, моей первой мыслью было бы: «Черт возьми! Нужна новая работа снова. '

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top