首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP技术架构师需要的意见

PHP技术架构师需要的意见
EN

Stack Overflow用户
提问于 2010-11-20 02:59:49
回答 2查看 296关注 0票数 0

请看下面的代码。

代码语言:javascript
复制
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是要走的路,还是有比它更好的模式/方式(假设站点是为数十万用户设计的)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-20 03:37:32

  1. Yes.
  2. I会说这个大小的每个文件大约一个小时,以确保一切顺利进行。因此,1-2周的扎实工作。
  3. 如果这个方法运行良好,只需重新考虑。如果你真的想要一些新的东西,那就去找一个框架。
  4. 一个现有的框架可能需要更长的时间来复制现有的功能(可能需要一个月)。但是,从长远来看,您将拥有一个更稳定的应用程序(很有可能)。
  5. MySQL没有任何问题。如果你想在将来切换到其他的reason.
  6. There,那么使用数据抽象层并不是你不能重构的理由。我最近这样做了,并不是所有的difficult.
  7. MVC都是非常理想的。也就是说,有许多不同的方法来实现MVC。有好的,有好的,有坏的。
票数 0
EN

Stack Overflow用户

发布于 2010-11-20 03:14:34

我认为没有比"mvc应用程序“更好的东西了,但mvc模式肯定可以用在这个应用程序中。您可以构建一些数据类来封装各种查询,并将结果转换为对象或对象数组。控制器类可以获取这些结果并对其进行处理,然后将处理后的数据提供给特定的模板。这是一个类似mvc的构造,非常容易维护。我也会构建一些帮助类。您不希望在任何地方都调用mysql_query,因为明年可能需要使用mysqli,甚至可能需要一个完全不同的数据库。

所以,是的,使用mvc模式,但不仅如此。重构整个代码。在可以使用的地方使用现成的库(例如,用于数据库抽象),并且在开始构建之前花了大量的时间思考正确的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4228407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档