У меня есть старое веб-приложение на 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();
?>
Проблема с вышеуказанным решением состоит в том, что его трудно расширять и поддерживать. Знаете ли вы какой-либо шаблон дизайна или любую технику, которую я мог бы использовать для лучшего рефакторинга / редизайна?
Спасибо за совет и извините за мой плохой английский
Я бы добавил метод, возможно, назову его renderColumn($tdParams = array())
которая имеет простую работу по возвращению одного элемента td (в виде строки):
$td_cell
$td_cell
открытие <td>
тег, возможно, принять массив атрибутов и значений для указанного td
пометить как paramater $tdParams
который был установлен по умолчанию значение пустого массива. $td_cell
закрытие </td>
тег. return $td_cell
Для рендеринга ваших строк БД вы можете (в более поздний момент времени) иметь запрос с большим или меньшим количеством точек данных, что приведет к необходимости большего или меньшего количества запросов. td
клетки.
Для тебя renderHeader
Метод, я бы добавил как минимум 2 параметра: title
и может быть для <h2>
как вы указали, как я вижу, что часто меняется.
Других решений пока нет …