使用视图或者不使用视图

时间:2020-03-05 18:45:55  来源:igfitidea点击:

我现在似乎卷入了与该项目的另一位程序员的辩论,这位程序员认为观点没有根据。他提出了一个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().

依此类推(在控制器中)。现在,他的论点实际上是有道理的,他声称,如果进行重新设计,我们要做的就是在一个地方更改HTML,并自动在各处进行更改。但是由于某种原因,这种方法仍然给我带来了错误,对这种方法的观点是否有好处?我的意思是除了不必手动重新输入HTML。

解决方案

回答

他使用的参数是我们需要具有视图的参数。两者都只能在一个地方进行更改。但是,在他的版本中,我们将视图标记与业务代码混合在一起。

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

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

回答

我过去做过类似的事情,那是浪费时间。例如,基本上,我们必须为HTML可以使用的所有内容编写包装器,而我们会忘记一些事情。当我们需要更改布局中的某些内容时,我们会想到"该死,我忘记了。现在我要编写另一个方法或者添加另一个参数"。

最终,我们将拥有大量的函数/类,这些函数/类会生成HTML,没有人会知道或者记得从现在起如何使用HTML。新开发者会诅咒我们使用此系统,因为他们必须在更改任何内容之前先学习它。相比之下,比起抽象的HTML绘图类,更多的人可能知道HTML……有时我们只需要使用纯HTML来掌握手法!

回答

老实说,它看起来很冗长且难以遵循,并且某些代码看起来像是很多布局信息。

我们总是尝试尽可能地从输出中分离逻辑。但是,通常情况下,视图和数据非常紧密地联系在一起,而这两个部分决定了彼此的方式(例如,在一个简单的电子商务网站中,我们可能决定要开始在每个产品旁边显示库存水平) ,这显然涉及更改视图以为此添加适当的html,以及要查找库存价值的业务逻辑)。

如果维护2个文件来完成此工作的想法太多,请尝试将其分为"收集数据"部分和"显示视图"部分,以在不增加所需管理文件数量的情况下获得最大的收益。

回答

HTML节省时间是有用的,但是仅当它们直观且易于理解时才有用。不得不实例化"新抽奖"听起来并不自然。此外," wideHeaderBox"和" left"仅对熟悉该系统的人有意义。而且,如果像同事一样重新设计,该怎么办?如果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")
));

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

回答

我总是发现直接使用html更容易。少一层抽象层(html->实际网页/ php函数-> html->实际网页)来处理,然后我们就可以使用HTML了。

我真的认为在这种情况下,"只是必须在一处更改它"是行不通的。这是因为当我们想更改一个函数的输出时,它们会出现很多次,而只是在一个地方。当然,我们可以使用参数,但是很快我们将获得一些带有十几个参数的函数。呸。

请记住,模板语言/系统通常会让我们包括子模板,从而使我们拥有一些可重复使用的html块。

最重要的是,如果我刚开始在公司工作,并且到处都看到这样的代码,我的第一个念头就是:"该死!再次需要新工作。