我可以将MVC设计模式应用于Procedural PHP

时间:2011-02-01 18:30:59

标签: php model-view-controller design-patterns

我一直试图找出是否可以将MVC架构应用于程序,以及如何将其实现到我的代码中。根据我的理解,MVC基本上代表了业务逻辑,表示层和其他逻辑的分离,尽管它似乎总是针对OO-PHP。

您能否推荐在程序上下文中处理MVC的最佳方法?

感谢。

5 个答案:

答案 0 :(得分:11)

是的,关于总结MVC ...但它不一定是面向对象的...你只需要遵循一些黄金规则:

  1. 控制器接收并处理输入,生成任何数据并将其放入模型中。
  2. 视图从模型中获取数据并进行渲染。
  3. 控制器不应该为视图格式化数据 - 它应该不知道视图需要的方式/原因/内容(例如,由于输出可能是JSON,因此不会在文本字符串中插入HTML)
  4. 视图不应该为自己查找任何数据 - 如果它不在模型中,则控制器在其作业中失败(抛出/报告错误)。
  5. 除此之外,你可以随心所欲地做事。您基本上需要一组过程来充当控制器 - 解析$_REQUEST变量(更可能是GET / POST / COOKIE)执行任何数据查找构建+填充模型,然后另一组过程作为控制器视图 - 获取模型中的内容并为用户呈现它。模型可以像关联数组一样简单。

答案 1 :(得分:11)

  

MVC是OO模式,你想用程序上下文来处理它。

这是完全错误的。 MVC与面向对象编码无关。

MVC是一种软件架构模式,旨在将信息的表示与用户与其的交互分开。

你如何实现这取决于你。你可以使用你想要的任何编码形式,面向对象,程序,功能,以及什么不能实现。

关于手头的问题:在编写过程PHP时,实现MVC模式的最简单方法是使用许多小函数,其中每个特定函数都有自己独特的任务。不要让一个函数有很多任务。这样就更容易分开。也不要在同一个文件中保留很多功能。而是将相关的函数一起收集在较小的组中,每个组在其自己的文件中(实际上在OO中使用类完成)。

有人在这里做了一个简单的例子,没有OO的MVC:http://www.fluffycat.com/PHP-Design-Patterns/Non-OO-MVC/

答案 2 :(得分:1)

绝对。使用以下任意组合:

  1. 使用包含文件。
  2. 使用功能。
  3. 分开源文件。
  4. 在源文件中划分代码的各个部分。
  5. 使用代码块(花括号)。
  6. 分离PHP和/或HTML和/或JS文件。
  7. 任何按照模型,视图和控制器的方式组织代码的东西。它可能不是纯粹的"或"纠正" MVC在一些人的心目中...但如果它更有意义地组织你的程序代码或者教你更多关于MVC的知识,那么它就是一件好事。

答案 3 :(得分:0)

这有点奇怪。 MVC是OO模式,您希望使用过程上下文来处理它。

我想到的第一件事就是拥有某种模板引擎,以便将PHP从HTML代码中分离出来。这将是向程序MVC迈出的一大步:)

接下来要命名同一组的函数(即包含相关对象逻辑的函数)和前缀(就像在类名下对方法进行分组)。

例如 - 查看用于处理mysql的PHP过程函数:

mysql_connect()
mysql_real_escape_string();
mysql_select_db();
mysql_query();

等。 并将这些功能分组到不同的文件中。这也有助于解耦一些逻辑。

如果还有其他事情发生,我会编辑我的帖子:)

答案 4 :(得分:0)

如果您正在实施新的设计模式,则很可能是从头开始重构或编写内容。如果您打算使用MVC,我强烈建议您转到OOP。它可以在程序上实现,但是非常hackish并且不是一个好的解决方案。

有几种免费的MVC php解决方案,您可以轻松获取。以下是一些:

  • Zend Framework
  • Kohana的
  • Code Ignighter