[英]Opinion needed from a PHP Technical Architect
请查看下面的代码。
require_once("initvars.inc.php");
require_once("config.inc.php");
?>
<?php
if($latestads_count)
{
?>
<div class="latestposts">
<div class="head"><?php echo $lang['LATEST_ADS']; ?></div>
<table border="0" cellspacing="0" cellpadding="0" class="postlisting" width="100%">
<?php
$sql = "SELECT a.*, ct.cityname, UNIX_TIMESTAMP(a.createdon) AS timestamp, feat.adid AS isfeat,
COUNT(*) AS piccount, p.picfile AS picfile, scat.subcatname, scat.catid, cat.catname
FROM $t_ads a
INNER JOIN $t_cities ct ON a.cityid = ct.cityid
INNER JOIN $t_subcats scat ON a.subcatid = scat.subcatid
INNER JOIN $t_cats cat ON scat.catid = cat.catid
LEFT OUTER JOIN $t_featured feat ON a.adid = feat.adid AND feat.adtype = 'A' AND feat.featuredtill >= NOW()
LEFT OUTER JOIN $t_adpics p ON a.adid = p.adid AND p.isevent = '0'
WHERE $visibility_condn
$loc_condn
GROUP BY a.adid
ORDER BY a.createdon DESC
LIMIT $latestads_count";
$res_latest = mysql_query($sql) or die($sql.mysql_error());
$css_first = "_first";
while($row = mysql_fetch_array($res_latest))
{
$url = buildURL("showad", array($xcityid, $row['catid'], $row['catname'],
$row['subcatid'], $row['subcatname'], $row['adid'], $row['adtitle']));
?>
<?php
if($row['isfeat'])
{
//$feat_class = "class=\"featured\"";
$feat_img = "<img src=\"images/featured.gif\" align=\"absmiddle\">";
}
else
{
//$feat_class = "";
$feat_img = "";
}
if($row['picfile'])
{
$picfile = $row['picfile'];
$imgsize = GetThumbnailSize("{$datadir[adpics]}/{$picfile}", $tinythumb_max_width, $tinythumb_max_height);
}
else
{
$picfile = "";
}
?>
<tr>
<td width="15">
<img src="images/bullet.gif" align="absmiddle">
</td>
<td>
<b><a href="<?php echo $url; ?>" <?php echo $feat_class; ?>><?php echo $row['adtitle']; ?></a></b>
<?php if(0&&$row['picfile']) { ?><img src="images/adwithpic.gif" align="absmiddle"><?php } ?>
<?php echo $feat_img; ?><br>
<span class="adcat">
<?php echo "$row[catname] $path_sep $row[subcatname]"; ?>
<?php
$loc = "";
if($row['area']) $loc = $row['area'];
if($xcityid < 0) $loc .= ($loc ? ", " : "") . $row['cityname'];
if($loc) echo "<br>$loc";
?>
</span>
</td>
<td align="right" width="<?php echo $tinythumb_max_width; ?>">
<?php if($picfile) { ?>
<a href="<?php echo $url; ?>"><img src="<?php echo "{$datadir[adpics]}/{$picfile}"; ?>" border="0" width="<?php echo $imgsize[0]; ?>" height="<?php echo $imgsize[1]; ?>" style="border:1px solid black"></a>
<?php } ?>
</td>
</tr>
这是来自现有项目的代码文件之一。 如您所见,它的html,sql,php都混合在一起了……显然很难维护。
此应用程序中大约有55个大小和类型相似的文件。
我想重构此代码,以下是我的目标:
1)易于维护。
2)可以通过添加其他功能轻松扩展。
3)能够在不同但有些相似的应用程序中重用此代码。
基于上述事实,我有很多问题:
1)您认为我们可以将此代码重构为MVC应用程序吗?
2)如果可以的话。 对于专家程序员来说,重构整个项目(55个文件)需要多少时间?
3)我应该重用上面的代码,还是应该从现有的mvc框架重新开始?
4)如果要使用现有的mvc框架(例如symfony,zend等),我们需要多少时间才能完成整个项目?
5)据我所知,此站点到目前为止只能运行Mysql(因为当前数据库已在mysql中完成)。 我们是否应该允许模型中的数据抽象/数据访问层(假设有些东西的性能比Mysql好,我不确定)
7)我们是否可以轻松地重构代码,使其包含模型(数据抽象/访问),视图(其他模板,视图逻辑等),控制器等子层,以备将来使用,或者需要白手起家?
8)是使用mvc的方式,还是有比它更好的模式/方式(假设该网站旨在供数十万用户使用)?
我认为没有“ mvc应用程序”之类的东西,但是肯定可以在此应用程序中使用mvc模式。 您可以构建一些数据类来封装各种查询,并将结果转换为一个对象或对象数组。 控制器类可以获取这些结果并进行处理,然后将处理后的数据馈送到特定的模板。 这是一个类似于mvc的构造,非常易于维护。 我也会建立一些辅助类。 您不想在任何地方都调用mysql_query,因为也许明年您将需要使用mysqli,甚至可能需要一个完全不同的数据库。
因此,是的,使用mvc模式,但不仅限于此。 重构整个代码。 在可能的地方使用可用的库(例如用于数据库抽象),并在开始构建之前花了很多时间思考正确的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.