MVC ::哪个去哪了?

Dee*_*pak 2 php model-view-controller codeigniter codeigniter-2

在过去的两年里,我是一名平板php程序员.现在我想转向MVC架构,所以我使用codeigniter它看起来非常简单.我想了解一些最佳实践,因为我正在开发中codeigniter.

我有一个controllerbuilding,一个model被叫building_data和一个叫做的视图building_view.现在我想通过检查很多条件来显示建筑物清单.我正在使用平面PHP进行以下操作

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

现在,MVC我正在做以下事情

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

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

ter*_*ško 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集合替换模型层,假装视图是模板,"控制器"是演示者和视图职责的组合.