5

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

4

5 回答 5

5

HTML 节省时间很有用,但它们只有在直观且易于理解时才有用。必须实例化 a new Drawjust 听起来不太自然。此外,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")
));

In the above example, the method names actually make sense to people who aren't familiar with your system. They'll also make more sense to you guys when you go back into a seldom-visited file and wonder what the heck you were doing.

于 2008-09-01T11:23:44.920 回答
1

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

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

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

于 2008-09-01T10:58:36.523 回答
1

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

最终,您将拥有大量生成 HTML 的函数/类,几个月后没人会知道或记得如何使用它们。新开发人员会诅咒你使用这个系统,因为他们必须在改变任何东西之前学习它。相比之下,了解 HTML 的人可能比了解您的抽象 HTML 绘图类的人多……而且有时您只需要接触纯 HTML!

于 2008-09-01T11:05:10.440 回答
1

老实说,它看起来非常冗长且难以理解,并且一些代码看起来像是非常多的布局信息。

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

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

于 2008-09-01T11:13:49.530 回答
1

I always find it much easier to work directly with html. Theres one less abstraction layer (html -> actual webpage / php function -> html -> actual webpage) to deal with then you just work in HTML.

I really think the 'just have to change it in one place' thing wont work in this case. This is because they'll be so many times when you want to change the output of a function, but only in just one place. Sure you can use arguments but you'll soon end up with some functions having like a dozen arguments. Yuck.

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

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

于 2008-09-02T01:10:55.773 回答