MVC ::哪个去哪了?

时间:2012-08-09 04:15:29

标签: php model-view-controller codeigniter codeigniter-2

过去两年我是一名平板php程序员。现在我想转移到MVC架构,所以我使用的codeigniter看起来非常简单。在codeigniter进行开发时,我想了解一些最佳实践。

我有一个名为controller的{​​{1}},一个名为building的{​​{1}}和一个名为model的视图。现在我想通过检查很多条件来显示建筑物清单。我在平面PHP中执行以下操作

  1. 从数据库中获取建筑物列表
  2. 根据某些标准A,B,C
  3. 拆分结果
  4. building_databuilding_viewsection - A中显示结果作为section -B输出。
  5. 现在在section-c我正在做以下

    1. HTML(型号)
    2. 上获取数据库中的建筑物列表
    3. MVC的结果存储在building_data控制器的building_data数组中
    4. 根据$data中的条件A,B,C拆分结果并输出building(我可以在视图中执行基于条件的数据分类(不使用mysql查询)吗?{{1 }})
    5. 我是否在不违反MVC架构规则的情况下做正确的事情?

1 个答案:

答案 0 :(得分: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集合替换模型层,假装视图是模板,“控制器”是演示者和视图职责的组合。