对MVC模式和类的使用感到困惑

时间:2011-08-09 15:51:24

标签: php oop model-view-controller codeigniter

我已经通过Code Igniter使用了MVC模式一段时间了。由于我不太用OOP概念经历它已成为很多程序的工作,但现在我想拓展我的设计模式的技能,但它是混淆了我。

我不确定如何使用MVC,我觉得更多是'通用类'。如果我想创建一个可以处理输入验证的类,那么我会将它设为库吗?如果我想扩展这个库,我会创建一个新类并将它与它的父级一起保存在库文件夹中吗?我能在库文件夹中创建文件夹结构吗?

我想偏离心态,即在制作新东西时控制器是我需要的。也许人们可以这样想;如果我进行搜索,并且搜索有多个“类型/标签”,比如搜索用户,页面,博客等,那么我会创建这些不同的库,可能会扩展一些超级库,然后只需创建一个搜索控制器决定每个任务使用哪个类?因此,如果用户转到“博客搜索”选项卡中的搜索,博客类将被加载,而不是仅仅有一大束的程序性的东西?

另外,如果这样做是个好主意,为什么我有模特?在某种程度上,我觉得模特就像课程一样(好吧,他们是duh)。但是,如果我只能使用模型,为什么要使用自定义类/库?

手头的问题:我厌倦了编辑核心功能。我害怕破坏应用程序,而且它变得非常无聊。

由于

2 个答案:

答案 0 :(得分:1)

由于我最近也在研究MVC和OOP,这可能有所帮助(根据你的要求):

<强> 1。 MVC架构与三层架构

模型 - 视图 - 控制器(MVC)模式将应用程序分为三个主要组件:模型,视图和控制器。

模型:大多数介绍MVC文章仅将模型称为应用程序的数据或数据库部分。这不准确。 Model是应用程序的一部分,用于处理数据,还包含应用程序的所有其他逻辑或业务规则,这些规则不是Controller或View的一部分。因此大多数应用程序的代码都在Model类中。

视图:视图是用户与应用程序交互的应用程序的用户界面部分。 UI通常是根据模型数据创建的。

控制器:Controller处理所有用户请求(来自View)并响应用户输入。它将用户输入传递给模型,模型可以处理它,一旦输出准备就绪,控制器将选择适当的视图来显示输出。必要时,View可以与Model通信以检索输出并为最终用户解析输出。

视图和控制器都与模型通信,但彼此独立,因此可以轻松修改(这是MVC中的概念“分离”)。

MVC模式经常与三层架构混淆。

来自维基百科:“三层是一种客户端 - 服务器架构,其中用户界面,功能处理逻辑(”业务规则“),计算机数据存储和数据访问是作为独立模块开发和维护的,大多数通常在不同的平台上......乍一看,这三层可能看起来与模型 - 视图 - 控制器(MVC)概念类似;但是,在拓扑上它们是不同的。三层架构中的基本规则是客户端层从不直接与数据层通信;在三层模型中,所有通信都必须通过中间层。从概念上讲,三层架构是线性的。但是, MVC架构是三角形的:视图发送更新到控制器,控制器更新模型,视图直接从模型更新。“

[来源:Multi-Tier Architechture]

<强> 2。课程和图书馆:代码单位

在决定如何组织代码时,有助于考虑单元中的代码。对于小型应用程序,一个类是一个足够好的“小”单元。当应用程序更大时,库可能更合适。简单地说,一个库只是一个类的集合,它们根据它们的功能(或者开发人员的想法和幻想:)组合在一起。

例如,您可能拥有一堆处理不同输入验证的类,您可以将它们整合到一个文件中,并将其称为“输入验证库”。

类和库使得重用代码变得更加容易,并使编码更加模块化,从而使其更易于管理。


规划应用程序时,请确定模型,视图和控制器中的类。如果您的应用程序很大,您可以根据需要将您的类组织到每个组件中的库中。

注意:我没有触及PHP的loooooong时间,也没有使用codeigniter。无论我在这里说什么,都广泛适用于使用任何OOP语言的MVC应用程序开发。

答案 1 :(得分:0)

模型用于数据库工作。使用库来实现Web应用程序的核心功能。使用帮助程序进行格式化等可能不是应用程序特定的,可以静态调用。库是实例化的,而帮助者不是。