繁体   English   中英

使用视图或不使用视图

[英]To use views or not to use views

我现在似乎正卷入与该项目的另一位程序员的辩论中,他认为这些观点没有任何优点。 他提出了一个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。

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")
));

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

他使用的论点是你需要观点的论据。 两者都导致只在一个地方改变它。 但是,在他的版本中,您将视图标记与业务代码混合在一起。

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

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

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

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

它看起来很冗长,很难说实话,一些代码看起来像是非常多的布局信息。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM