Любой хороший шаблон дизайна, чтобы использовать для извлечения HTML из бизнес-логики в PHP?

У меня есть старое веб-приложение на PHP4, в котором большинство страниц выглядит следующим образом (на некоторых страницах есть левое меню, на некоторых нет нижнего колонтитула):

<?php
echo "<html>";
echo "<head><title>TITLE GOES HERE</title></head";
echo "<body>";
echo "<h2>THIS IS A TITLE</h2>";
// Here i fetch data from DB
echo "<table>";
echo "<tr>";
echo "</tr>";
foreach($rowsFromDB as $row) {
echo "<tr>";
// here i echo some <td> containing $row data
echo "</tr>";
}
echo "</table>";
echo "</body>";
echo "</html>";
?>

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

<?php
class PageRenderer {
public static function renderHeader() {
echo "<html>";
echo "<head><title>TITLE GOES HERE</title></head";
echo "<body>";
echo "<h2>THIS IS A TITLE</h2>";
}

public static function renderContent($rowsFromDB) {
echo "<table>";
echo "<tr>";
echo "</tr>";
foreach($rowsFromDB as $row) {
echo "<tr>";
// here i echo some <td> containing $row data
echo "</tr>";
}
echo "</table>";
}

public static function renderFooter() {
echo "</body>";
echo "</html>";
}
}

$renderer=new PageRenderer();
$renderer->renderHeader();
// Fetch data from DB
$renderer->renderResults($rowsFromDB);
$renderer->renderFooter();
?>

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

2

Решение

Я бы добавил метод, возможно, назову его renderColumn($tdParams = array()) которая имеет простую работу по возвращению одного элемента td (в виде строки):

  • Инициализировать пустую строку, $td_cell
  • Добавить в $td_cell открытие <td> тег, возможно, принять массив атрибутов и значений для указанного td пометить как paramater $tdParams который был установлен по умолчанию значение пустого массива.
  • Добавить в $td_cell закрытие </td> тег.
  • return $td_cell

Для рендеринга ваших строк БД вы можете (в более поздний момент времени) иметь запрос с большим или меньшим количеством точек данных, что приведет к необходимости большего или меньшего количества запросов. td клетки.

Для тебя renderHeader Метод, я бы добавил как минимум 2 параметра: title и может быть для <h2> как вы указали, как я вижу, что часто меняется.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]