2

在过去的 2 年里,我是一名平面 php 程序员。现在我想转向MVC建筑,所以我正在使用codeigniter它看起来很容易开始。我想知道一些在codeigniter.

我有一个controller被调用的building,一个model被调用的building_data和一个被调用的视图building_view。现在我想通过检查很多条件来显示建筑物列表。我在平面 PHP 中执行以下操作

  1. 从数据库中获取建筑物列表
  2. 根据特定标准 A、B、C 拆分结果
  3. section - A在、section -B和中显示结果section-c作为HTML输出。

现在MVC我正在做以下事情

  1. 获取building_data(模型)上的数据库中的构建列表
  2. 将结果存储在控制器building_data$data数组中building
  3. 根据条件 A、B、C 拆分结果building_view并输出HTML(我可以在视图中进行基于条件的数据分类(不使用 mysql 查询)吗?!My actual question

我在不违反 MVC 架构规则的情况下做正确的事吗?

4

1 回答 1

7

MVC 是一种设计模式。不是架构。

但是,如果您想学习最佳实践或 MVC,那么 CodeIgniter 是错误的选择。它充满了糟糕和过时的做法(PHP4 代码片段、全局状态和许多其他问题),并且没有实现任何接近 MVC 模式的东西。它更像是 PHP 的糟糕 Rails 克隆。

视图应该是对象,而不是愚蠢的模板。您的控制器应该告诉模型层用户选择了哪个建筑物,然后视图获取有关当前建筑物的详细信息并决定如何表示它。

在正确的 MVC 实现中,视图是包含表示逻辑的实例。他们从模型层获取信息,然后选择使用哪些模板来呈现响应,甚至是否需要 HTML 响应。也许用户实际上请求了 JSON 或 XML 格式的数据。或者,视图需要发送的唯一响应可能是 HTTP 标头。

您还应该知道,您不能在 Web 应用程序中实现经典的 MVC 模式(或者至少它非常困难并且需要使用套接字和持久模型)。相反,我们使用受 MVC 启发的模式。它们之间的主要区别在于 View 如何从 Model 层获取信息。

  • 在 MVP 和 MVVM 模式中,视图是被动的,并通过类似控制器的结构(从透视的角度看演示者或视图模型)接收数据。
  • 在 Model2 MVC 和 HMVC 模式中,视图处于活动状态,它直接从模型层请求信息。

还有第三组:类似 Rails 的实现。它将模型层替换为基于 ActiveRecord 的 ORM 的集合,假装视图是一个模板,而“控制器”是演示者和视图职责的组合。

于 2012-08-09T05:01:46.857 回答