我有一个旧的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();
?>
上述解决方案的问题是难以扩展和维护。你知道任何设计模式或任何可以用于更好的重构/重新设计的技术吗? 谢谢你的建议,抱歉我的英文不好
答案 0 :(得分:0)
我添加了一个方法,可能称之为renderColumn($tdParams = array())
,它只能返回一个单独的td元素(作为字符串):
$td_cell
$td_cell
开头<td>
标记,可以接受所述td
标记的属性和值数组作为参数$tdParams
,其已被设置为默认值一个空数组。 $td_cell
结束</td>
代码。 return $td_cell
为了渲染数据库行,您可能(在稍后的时间点)具有包含更多或更少数据点的查询 - 因此将导致需要更多或更少td
个单元格。
对于您的renderHeader
方法,我会添加至少2个参数:title
,也许可以添加<h2>
,因为我可以看到频繁更改。