我有一个旧的PHP4 web应用程序,其中大多数页面都是这样的(有些页面有左菜单,有些页面没有页脚):
<?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
标签的属性和值的数组作为参数$tdParams
,该参数已被设置为空数组的默认值 - 在
$td_cell
上附加一个结束的</td>
标记 return $td_cell
为了呈现DB行,您可能(在稍后的时间点)有一个具有更多或更少数据点的查询,因此将导致需要更多或更少的td
单元格。
对于您的renderHeader
方法,我会添加至少两个参数:title
,可能是您指定的<h2>
,因为我可以看到这种情况经常发生变化。