MVC—到底有什么用
MVC 指的是一个动态网站的组织方法。该设计模式是 1979 年由挪威人 Trygve Reenskaug 首次提出来的,这里是一些概要:
- 模型是包含数据的对象,他们与数据库交互,对这些数据进行存取,使其在不同的阶段包含不同的值,不同的值代表了不同的状态,具有特定的含意。
- 视图显示模型的状态,他们负责显示数据给使用者。(虽然他们通常是 HMTL 视图,但是,他们可能是任何形式的接口。比如 PDA 屏幕或 WAP 手机屏幕)
- 控制器用来改变模型的状态,他们操作模型,提供动态的数据给视图。
CI 中模型、视图和控制器文件都有自己的文件夹。文件本身是 .php 文件,通常以遵循某种命名规则的类的形式呈现。
CI 帮助你遵循 MVC 模式,使你更有效地组织代码。CI允许你有最大的灵活性,你可以获得MVC结构的所有好处。
当你编程的时候,试着始终用MVC来思考问题。尽可能确保你的“视图”聚焦于显示内容,“控制器”纯粹地用来控制应用程序流。把应用程序逻辑保留在数据模型和数据库中。
这样,如果你决定开发新的视图,你不必在任何一个控制器或模型中修改代码。如果你要更改“商业逻辑”,那么你只需要在模型中修改代码。
另一方面,你必须认识到,MVC只是用来帮助你的一种设计方式,而不是用来约束你的。MVC可以有不同的实现方式。CI的论坛中包含许多如何“正确合理”的实现MVC的方式。(我应该在控制器部分实现数据库查询功能吗?我能直接从视图发送数据到模型吗?或者我必须通过控制器来访问?)
与其寻找理论上的正确方式,不如遵循两项有用的原则。这些在CI用户手册的设计和架构目标一节中有相关描述:
- 松耦合:耦合是指一个系统的组件之间的相关程度。越少的组件相互依赖,那么这个系统的重用性和灵活性就越好。我们的目标是一个非常松耦合的系统。
- 组件专一性:专一是指组件有一个非常小的专注目标。在CodeIgniter里,为了达到最大的用途,每个类和它的功能都是高度自治的。
应用程序流程图
下图说明数据流如何贯穿整个系统:
- index.php 作为前端控制器,初始化运行 CodeIgniter 所需要的基本资源。
- Router 检查 HTTP 请求,以确定谁来处理请求。
- 如果缓存(Cache)文件存在,它将绕过通常的系统执行顺序,被直接发送给浏览器。
- 安全(Security)。应用程序控制器(Application Controller)装载之前,HTTP 请求和任何用户提交的数据将被过滤。
- 控制器(Controller)装载模型、核心库、辅助函数,以及任何处理特定请求所需的其它资源。
- 最终视图(View)渲染发送到 Web 浏览器中的内容。如果开启缓存(Caching),视图首先被缓存,所以将可用于以后的请求。