过去两年我是一名平板php程序员。现在我想转移到MVC
架构,所以我使用的codeigniter
看起来非常简单。在codeigniter
进行开发时,我想了解一些最佳实践。
我有一个名为controller
的{{1}},一个名为building
的{{1}}和一个名为model
的视图。现在我想通过检查很多条件来显示建筑物清单。我在平面PHP中执行以下操作
building_data
,building_view
和section - A
中显示结果作为section -B
输出。现在在section-c
我正在做以下
HTML
(型号)MVC
的结果存储在building_data
控制器的building_data
数组中$data
中的条件A,B,C拆分结果并输出building
(我可以在视图中执行基于条件的数据分类(不使用mysql查询)吗?{{1 }})我是否在不违反MVC架构规则的情况下做正确的事情?
答案 0 :(得分:7)
MVC是一种设计模式。不是建筑。
但是,如果您希望学习最佳实践或MVC,那么CodeIgniter是错误的选择。它充满了糟糕和过时的做法(PHP4代码片段,全局状态和许多其他问题),并没有实现任何接近MVC模式的东西。它更像是PHP的糟糕Rails克隆。
视图应该是对象,而不是愚蠢的模板。您的控制器应该告诉模型层用户选择了哪个建筑物,然后查看获取当前建筑物的详细信息并决定如何表示所有建筑物。
在适当的MVC实现中,视图是包含表示逻辑的实例。他们从模型层获取信息,然后选择用于呈现响应的模板,或者甚至是否需要HTML响应。也许用户实际上要求JSON或XML格式的数据。或者,该视图需要发送的唯一响应是HTTP标头。
此外,您应该意识到您无法在Web应用程序中实现传统的MVC模式(或者至少它非常困难并且需要使用套接字和持久模型)。相反,我们使用MVC启发的模式。它们之间的主要区别在于View如何从Model层获取信息。
还有第三组:类似Rails的实现。它用基于ActiveRecord的ORM集合替换模型层,假装视图是模板,“控制器”是演示者和视图职责的组合。