PHP关注点和MVC

时间:2016-02-20 02:31:18

标签: php model-view-controller separation-of-concerns

首先,我不确定这个问题是否适合SO的问题模型,所以如果主持人不合适,请关闭它...

我最近在MVC和SoC上阅读了很多内容以及它们与PHP编程的关系,并且在理解概念与我当前的编程风格有何不同时遇到了一些困难。我编写的任何应用程序都使用url_rewrite路由,路由由单个文件处理,该文件根据请求的子系统选择适当的controller.php文件。然后在该控制器文件中分配最终的智能模板文件,并将包含所讨论页面的业务逻辑的PHP文件包含在堆栈中。

我遇到的问题是,当我查看MVC和SoC信息时,我看到的所有示例都是作为广泛的相互依赖的类和一些相当深的命名空间编写的,但是当我编写代码时我只使用我需要一个对象的对象可重用但不同的代码(与PHP站点本身上的对象示例一致),因此结束了一些代码被分类和命名空间我的应用程序的近70%仍保留在全局命名空间中而没有分类。在我看来,这种编码技术仍然符合关注点分离的设计原则,尽管我不太确定MVC,因为我能找到的MVC的每一个例子都是由大量的类构建的。

有人可以解释一下,如果我不在这里,或者我是否正在使用我当前的编码实现SoC甚至MVC,并向我解释如果将整个应用程序嵌入到一系列类中是SoC和MVC的要求。

由于

2 个答案:

答案 0 :(得分:2)

好的,我通常会接受这些开放式问题:P

让我把你的整个事情改写成一个新问题 - 随时告诉我我错了!

我想你在问 - “我的编码风格是否符合x y z的最佳做法?”

现在看 - 我一直扮演各种各样的角色,我坚信没有人曾经破解过一个完整的SoC架构 - 在某些时候,总是需要在视角端的人之间进行权衡。 job,有人上游提取输入并使其工作,使其与数据库和逻辑联系起来。

例如 - 我现在正构建一个将HTML文件作为输入的系统,通过PHP读取它们。 PHP将HTML元素转换为一堆JSON,并根据x,y和z为该JSON添加逻辑,然后将其推送到Facebook React组件 - 当它向那里的某人解释时,将其全部转换回HTML / DOM是一个香肠机器,作为输入,HTML,输出HTML,你可以看到他们为什么会去 - 圣洁的狗屎你在做什么!!

现在 - 我们为什么要这样做?因为它对项目有意义,对团队来说是有意义的。我们可以同样使用一些预定义的框架,等等等等 - 但这对我们有用。

(这里需要注意的是,如果你需要一个高性能的应用程序,这可能是错误的方法,但是 - 请记住你所读的内容(相互依赖的类等)可能也不是高效的 - PHP的优化代码是努力工作 - 我的建议是,首先让它工作,如果产品成功,付钱给别人修理你的糟糕代码 - 服务器时间便宜 - 你的时间不是这样)

我的陈述将是,没有具体的例子和用例 - 人们将很难评论你的方法 - 但要明白有很多不同的做事方式,你可能会看到很多开源代码以一种方式编写或者另外,但是如果你写了一些可以达到目标的东西,那么你唯一需要考虑的是它具有高效的分离性,以便你的设计师可以设计,你的编码人员可以处理代码而你的CEO可以看看销售数据。

希望这有帮助。

答案 1 :(得分:2)

根据您提供的信息,您做得很好。我认为你掌握了分离关注点和MVC。我认为您应该仔细研究其他代码库中抽象的内容,模块化的方式,并思考如何处理可能出现在Web上的内容发展。

如果我想在每个控制器之前运行一些代码怎么办?或者在请求和控制器之间运行的中间件?或者在处理完每个控制器后将变量注入视图?你如何分离POST,GET,PUT,DELETE逻辑,但仍然将它们分组在一个资源中?其中一些可以通过您的架构实现,但我认为许多解决方案将更加清晰,具有类重的架构。当然,更清洁的东西在旁观者的眼中。

向公众发布的框架尝试通用并尽可能多地处理用例。我看到的一个问题是你假设最后调用控制器文件然后设置视图。因此,即使其中的逻辑处于全局状态,它也只存在于该文件中。实质上,该文件充当命名空间。我不认为这是一个通用的Web框架应该做出的假设,但是在为自己编写内容时,你可以侥幸逃脱。