我该怎么做才能提高我的MVC?

时间:2010-06-26 10:17:40

标签: php model-view-controller

我正在考虑重新开发我的MVC,然后才开始与之相提并论。目前它使用一个sinle控制器,它接受用户输入并确定模型。该模型有maby不同的方法,我称之为动作,因为一个是自动调用的。该模型加载其视图文件,该文件再次拥有许多不同的方法。该模型可以设置可在视图中使用的属性。然后控制器调用模板类,它解析输出以供显示。

这是最好的方法吗?

或者每个不同的部分(新闻,联系人,关于)都应该有自己的控制器,它可以加载特定的模型和视图。本质上,它不是将方法分组到单个文件中,而是使用多重文件。

我有点迷失方向。

干杯

4 个答案:

答案 0 :(得分:2)

开始使用有效的MVC,并且像Symfony或Cake一样着名。由此你决定:

  • 了解最佳做法,您自己做了什么;
  • 如果您觉得可以通过使用这些来节省时间,那就放弃自己。

答案 1 :(得分:2)

如果您正在考虑推进自己的MVC模型,如@ e-satisf所说,您将需要体验已开发系统中正在发生的事情。然而,根据我在设计MVC模型和确定开源社区中的内容方面的经验,我坚持回到我自己的MVC有两个很好的理由。一个原因是定制的灵活性,另一个原因是自己的MVC隐私。

我使用以下方法进行MVC设计模式。

识别用户请求网址的Router.php文件。此路由器将能够获取控制器并包含该文件并调用控制器默认方法。

如果需要运行,加载的控制器也可以加载其他控制器。这是使用全局方法完成的,其中所有控制器类将扩展到能够调用其他控制器的MainController类。

我确实使用全局注册表来设置和获取从一个控制器到另一个控制器的变量。

模型用于从表中获取数据,我的大多数模型将代表包含CRUD(创建读取更新删除)的数据库功能。这样控制器就可以使用模型轻松地操作数据库表数据。

如果您希望系统更智能地识别知道文件名所需的操作,那么所有控制器,模型和视图中的命名约定也很重要。

我为每种类型的控制器分别使用视图。这些视图将被发送到主模板视图文件。 与模型相同,控制器将能够将视图设置为主视图。

您可以执行其他自定义,例如在调用类之前应用安全性方法,或者在调用类/控制器/模型/视图之后应用安全性方法等。 这是由MainController完成的,它总是会查看一个带有autoload类的文件夹,该文件夹说明在构建内容和传递输出的过程中,应该在不同操作之前和之后加载哪些文件。

MVC不是一个小规模的想法,但它是一个可以随时开发的设计理念。如果您知道如何搜索google.com等主要搜索引擎,那么可以找到许多PHP MVC开源框架

但我确实告诉你,如果你只是开发一个小型动态网站,MVC不是一个好的解决方案,因为与开发小型网站相比,它将在开发中消耗更多时间。 MVC是理想的,如果你有业务逻辑并需要系统自动化以避免大多数日常的开发任务,我想说MVC最适合大型应用程序。

答案 2 :(得分:1)

  

模型加载其视图文件

Controller应充当模型和视图之间的中介。

模型不应该知道视图呈现它的方式,并且View也不应该知道模型的任何逻辑。

理论上,如果您的MVC结构良好,您应该能够使用不同类型的视图(例如,HTML,XML,JSON)表示相同的模型。

答案 3 :(得分:0)

构建FrontController,它解析请求uri并决定加载哪个控制器以及运行哪个方法。使用.htaccess将所有请求重写为index.php

//index.php
class FrontController{
  function run(){
    //parse request uri here /comment/new
    //load controller  comment
    //run controllers method new and pass some request attributes
  }
}

// ../controllers/comment.php
class Controller_Comment extends Controller{
  function new($request){
    //do stuff here
  }
}