在我的应用程序中,我有一个View
对象可以load($template)
作为模板准备好使用该render()
方法进行渲染。
在我读过的所有内容中,Views
有时我看到人们以我目前的方式做事,而其他时候我看到人们做类似以下的事情
class ProductView extends View {
}
class CheckoutView extends View {
}
View
每页有一个单独的。
两种方式的优点/缺点是什么?
任何建议都会非常感谢。
在我的应用程序中,我有一个View
对象可以load($template)
作为模板准备好使用该render()
方法进行渲染。
在我读过的所有内容中,Views
有时我看到人们以我目前的方式做事,而其他时候我看到人们做类似以下的事情
class ProductView extends View {
}
class CheckoutView extends View {
}
View
每页有一个单独的。
两种方式的优点/缺点是什么?
任何建议都会非常感谢。
视图不应该是“加载模板”。如果您
$this->load('header');
在视图中有类似代码,则违反SRP。View(有时)使用模板为用户创建响应,但它不应该创建它们。
在您将遇到的大多数关于视图的文章中,您将阅读 Rails(及其克隆)对视图的解释。在 RoR 中,您没有视图。只是一个美化的愚蠢模板。
表示层的结构使您最好在控制器和视图之间建立 1:1 的关系。每个视图负责处理由用户输入触发的响应。因此:您的页面通常会在每个执行时间有一个视图。
在更复杂的情况下,您可能需要研究复合视图的概念。这种方法使您可以将表示逻辑分成更小的块。如果您使用ViewModel,这也使得构建代码变得更加容易。
底线是:如果您对整个应用程序只有一个视图,那么您做错了。
每页一次浏览绝对是最适合网络的。请注意,我的意思不是每个控制器一个视图,而是每个不同的页面。您希望有不同的模板可以被不同的视图调用(例如页眉、页脚或导航栏)。
例如在里面BlogPostView
你会有:
$this->load('header');
$this->load('post', $data);
$this->load('footer');
然后渲染它:
$this->render();
它没有“唯一真正的解决方案”。但对我来说,视图必须尽可能简单。比如 printf 函数。你想扩展 printf 行为吗?我想不是!