在我的应用程序中,我有一个View
对象,它可以load($template)
一个模板,以使它准备好使用render()
方法进行渲染。
在我读过的所有关于Views
的东西中,有时我看到人们像我现在这样做,有时我看到人们像下面这样做
class ProductView extends View {
}
class CheckoutView extends View {
}
每页有一个单独的View
。
这两种方式的优点/缺点是什么?
View不应该是"loading templates"。如果视图中有
$this->load('header');
这样的代码,那么它就违反了SRP。视图(有时)使用模板为用户创建响应,但它不应该创建它们。
在您将遇到的大多数关于视图的文章中,您将阅读关于从Rails(及其克隆)中解释视图的文章。在RoR中你没有视图。只是一个美化了的哑模板。
表示层的结构使得控制器和视图之间的关系最好是1:1。每个视图都负责处理由用户输入触发的响应。因此:您的页面通常在每次执行时间有一个视图。
在更复杂的情况下,您可能需要了解复合视图的概念。这种方法允许您将表示逻辑分成更小的块。如果您使用ViewModel,这也使构建代码变得容易得多。
最重要的是:如果你在整个应用程序中只有一个视图,那么你就做错了。
每页一个视图绝对是最适合web的。注意,我指的不是每个控制器一个视图,而是每个不同的页面。您希望拥有不同的模板,这些模板可以被不同的视图调用(例如页眉、页脚或导航栏)。
例如,在BlogPostView
中,您可以输入:
$this->load('header');
$this->load('post', $data);
$this->load('footer');
,然后使用:
$this->render();
没有"唯一正确的解"。但对我来说,视图必须尽可能简单。像printf函数一样。您想扩展打印行为吗?我不这么认为!