使用视图或不使用视图

时间:2008-09-01 10:55:18

标签: php model-view-controller

我现在似乎正卷入与该项目的另一位程序员的辩论中,他认为这些观点没有任何优点。他提出了一个PHP看起来像这样的系统:

$draw = new Draw;
$nav = $draw->wideHeaderBox().
$draw->left().
    $draw->image().
        Image::get($image,60,array('id'=>'header_image')).
    $draw->imageEnd().
$draw->leftEnd().
$draw->left(10).
    '<div id="header_text">'.
        self::defaultSectionText().
    '</div>'.
$draw->leftEnd().

等等(这是在控制器btw中)。现在他的论点实际上是有道理的,他声称,如果有重新设计,我们需要做的就是在一个地方改变HTML,它会自动改变。但是出于某种原因,这种方法仍然以错误的方式让我感到困惑,对这种方法有什么看法?我的意思是除了不必手动重新输入HTML。

5 个答案:

答案 0 :(得分:5)

HTML节省时间非常有用,但它们只有在直观且易于理解时才有用。必须实例化new Draw听起来不太自然。此外,wideHeaderBoxleft只会对熟悉系统的人有意义。如果 重新设计,就像你的同事一样,该怎么办?如果wideHeaderBox变得非常狭窄怎么办?您是否会更改PHP方法生成的标记(以及样式,可推测)但是留下一个非常不准确的方法名称来调用代码?

如果你们只是 使用HTML生成,你应该在视图文件中使用它,你应该在真正需要/有用的地方使用它,例如:

HTML::link("Wikipedia", "http://en.wikipedia.org");
HTML::bulleted_list(array(
    HTML::list_item("Dogs"),
    HTML::list_item("Cats"),
    HTML::list_item("Armadillos")
));

在上面的示例中,方法名称实际上对不熟悉系统的人有意义。当你回到一个很少访问的文件并想知道你在做什么时,他们也会对你们更有意义。

答案 1 :(得分:1)

他使用的参数是拥有视图所需的参数。两者都导致只在一个地方改变它。但是,在他的版本中,您将视图标记与业务代码混合在一起。

我建议使用更多模板化设计。在PHP中执行所有业务逻辑,设置页面所需的所有变量。然后让你的页面标记引用那些变量(并且不处理任何业务逻辑)。

你看过聪明吗? http://smarty.php.net

答案 2 :(得分:1)

我过去做过类似的事情,这是浪费时间。例如,你基本上必须为HTML已经存在的所有内容编写包装器,你会忘记一些事情。当您需要更改布局中的某些内容时,您会想到“拍摄,我忘记了......现在我需要编写另一种方法或添加其他参数”。

最终,您将拥有大量的函数/类,这些函数/类生成HTML,没有人会知道或记住从现在开始如何使用数月。新的开发人员会诅咒你使用这个系统,因为他们必须在改变任何东西之前学习它。相比之下,更多的人可能知道HTML而不是抽象的HTML绘图类......有时你只需要用纯HTML来搞定!

答案 3 :(得分:1)

看起来很冗长,很难说实话,有些代码看起来很像布局信息。

我们总是尝试尽可能地从输出中分离逻辑。然而,通常情况下,视图和数据与指示对方应该如何的两个部分紧密相关(例如,在简单的电子商务网站中,您可能决定要开始显示每个产品旁边的库存水平,这显然涉及更改视图以为此添加适当的html,以及用于计算股票价值的业务逻辑。)

如果想要维护2个文件来执行此操作太多无法处理,请尝试将内容拆分为“收集数据”部分和“显示视图”部分,在不增加文件数量的情况下获得大部分好处需要管理。

答案 4 :(得分:1)

我总觉得直接使用html更容易。 Theres一个较少的抽象层(html - &gt;实际网页/ php函数 - &gt; html - &gt;实际网页)来处理然后你只是在HTML中工作。

我真的认为“只需要在一个地方改变它”在这种情况下不会起作用。这是因为当你想要改变一个函数的输出时它们会是这么多次,但只在一个地方。当然你可以使用参数,但你很快就会得到一些具有十几个参数的函数。呸。

请记住模板语言/系统通常允许您包含子模板,允许您拥有一些可重复使用的html块。

最重要的是,如果我刚开始在贵公司工作并且到处看到类似的代码,我的第一个想法是,'该死的!再次需要一份新工作。'