PHP 关注点分离和 MVC
PHP Separation of Concerns and MVC
首先,我不确定这个问题是否适合 SO 的问题模型,所以如果不适合版主请关闭它...
我最近阅读了很多关于 MVC 和 SoC 的文章,以及它们与 PHP 中的编程的关系,但我很难理解这些概念与我当前的编程风格有何不同。我编写的任何应用程序都使用 url_rewrite 路由,路由由单个文件处理,该文件根据请求的子系统选择适当的 controller.php 文件。然后在该控制器文件中分配最终的 smarty 模板文件,并将包含相关页面业务逻辑的 PHP 文件包含到堆栈中。
我遇到的问题是,当我查看 MVC 和 SoC 信息时,我看到的所有示例都被编写为广泛的相互依赖 类 和一些相当深的命名空间,但是当我编码时我只使用对象我需要一个用于可重用但不同代码的对象(与 PHP 站点本身的对象示例一致),因此最终将一些代码分类和命名空间我的应用程序的近 70% 保留在全局命名空间中没有分类。在我看来,这种编码技术仍然符合关注点分离的设计原则,尽管我不太确定是否是 MVC,因为我能找到的每个 MVC 示例都是完全由大量 类.
有人可以解释一下我是否偏离了这里,或者我是否正在使用我当前的编码实现 SoC 甚至可能是 MVC,并向我解释一下将整个应用程序嵌入 类 范围内是否是一个SoC 和 MVC 的要求。
谢谢
好的,我通常会回答这些开放式问题 :P
让我用一个新问题来重新表述你的全部内容——随时告诉我我错了!
我想你是在问——“我的编码风格是否符合 x y z 的最佳实践?”
现在看——我担任过各种角色,我坚信没有人破解过完整的 SoC 架构——在某些时候,总是需要权衡取舍完成他们的工作,上游的某个人接收输入并使其工作,使其与数据库和逻辑相关联。
例如 - 我实际上正在构建一个系统,该系统将 HTML 文件作为输入,通过 PHP 读取它们。 PHP 将 HTML 元素转换为一堆 JSON 并根据 x、y 和 z 向 JSON 添加逻辑,然后将其推送到 Facebook React 组件——将其全部转换回 HTML / DOM – 当您向某人解释有一台香肠机将 HTML 作为输入并输出 HTML 时,您可以看看他们为什么会去——天哪,你在做什么!!
现在——我们为什么要这样做?因为它对项目有意义,对团队也有意义。我们同样可以使用一些预定义的框架和等等等等等等——但这对我们有用。
(这里需要注意的是,如果您需要一个高性能的应用程序,这可能是错误的方法,但是 - 请记住您阅读的内容(相互依赖 类 等)也可能不是高性能——PHP 代码的优化是一项艰苦的工作——我的建议是,先让它运行,然后如果产品成功,请花钱请人修复你的糟糕代码——服务器时间很便宜——你的时间不便宜)
我对你的陈述是,没有具体的例子和用例——人们很难对你的方法发表评论——但要明白有很多不同的做事方式,你可能会看到很多开源代码写在一个方式或其他方式,但是如果您编写的东西可以实现目标,那么您唯一关心的应该是它的性能以及它具有“足够”的分离,以便您的设计师可以从事设计工作,您的编码人员可以从事代码工作,而您的 CEO 可以看看销售数据。
希望对您有所帮助。
从您提供的信息来看,您做得很好。我认为您掌握了关注点分离,可能还有 MVC。我认为你应该仔细看看其他代码库中的东西是如何抽象,东西是如何模块化,并考虑你将如何处理这些东西可能会出现在 Web 开发中。
如果我想在每个控制器前添加一些代码 运行 怎么办?还是请求和控制器之间 运行 的中间件?或者在处理完每个控制器后向视图中注入一个变量?您如何分离 POST、GET、PUT、DELETE 逻辑,但仍将它们分组在一个资源中?其中一些可以通过您的体系结构实现,但我认为许多解决方案在 class-heavy 体系结构中会更清晰。当然,仁者见仁,智者见智。
发布到 public 的框架尽量通用并处理尽可能多的用例。我看到的一个问题是您假设最后调用控制器文件然后设置视图。因此,即使其中的逻辑处于全局状态,它也仅存在于该文件中。本质上,该文件充当命名空间。我不认为这是通用 Web 框架应该做出的假设,但这是您在为自己编写内容时可以摆脱的东西。
首先,我不确定这个问题是否适合 SO 的问题模型,所以如果不适合版主请关闭它...
我最近阅读了很多关于 MVC 和 SoC 的文章,以及它们与 PHP 中的编程的关系,但我很难理解这些概念与我当前的编程风格有何不同。我编写的任何应用程序都使用 url_rewrite 路由,路由由单个文件处理,该文件根据请求的子系统选择适当的 controller.php 文件。然后在该控制器文件中分配最终的 smarty 模板文件,并将包含相关页面业务逻辑的 PHP 文件包含到堆栈中。
我遇到的问题是,当我查看 MVC 和 SoC 信息时,我看到的所有示例都被编写为广泛的相互依赖 类 和一些相当深的命名空间,但是当我编码时我只使用对象我需要一个用于可重用但不同代码的对象(与 PHP 站点本身的对象示例一致),因此最终将一些代码分类和命名空间我的应用程序的近 70% 保留在全局命名空间中没有分类。在我看来,这种编码技术仍然符合关注点分离的设计原则,尽管我不太确定是否是 MVC,因为我能找到的每个 MVC 示例都是完全由大量 类.
有人可以解释一下我是否偏离了这里,或者我是否正在使用我当前的编码实现 SoC 甚至可能是 MVC,并向我解释一下将整个应用程序嵌入 类 范围内是否是一个SoC 和 MVC 的要求。
谢谢
好的,我通常会回答这些开放式问题 :P
让我用一个新问题来重新表述你的全部内容——随时告诉我我错了!
我想你是在问——“我的编码风格是否符合 x y z 的最佳实践?”
现在看——我担任过各种角色,我坚信没有人破解过完整的 SoC 架构——在某些时候,总是需要权衡取舍完成他们的工作,上游的某个人接收输入并使其工作,使其与数据库和逻辑相关联。
例如 - 我实际上正在构建一个系统,该系统将 HTML 文件作为输入,通过 PHP 读取它们。 PHP 将 HTML 元素转换为一堆 JSON 并根据 x、y 和 z 向 JSON 添加逻辑,然后将其推送到 Facebook React 组件——将其全部转换回 HTML / DOM – 当您向某人解释有一台香肠机将 HTML 作为输入并输出 HTML 时,您可以看看他们为什么会去——天哪,你在做什么!!
现在——我们为什么要这样做?因为它对项目有意义,对团队也有意义。我们同样可以使用一些预定义的框架和等等等等等等——但这对我们有用。
(这里需要注意的是,如果您需要一个高性能的应用程序,这可能是错误的方法,但是 - 请记住您阅读的内容(相互依赖 类 等)也可能不是高性能——PHP 代码的优化是一项艰苦的工作——我的建议是,先让它运行,然后如果产品成功,请花钱请人修复你的糟糕代码——服务器时间很便宜——你的时间不便宜)
我对你的陈述是,没有具体的例子和用例——人们很难对你的方法发表评论——但要明白有很多不同的做事方式,你可能会看到很多开源代码写在一个方式或其他方式,但是如果您编写的东西可以实现目标,那么您唯一关心的应该是它的性能以及它具有“足够”的分离,以便您的设计师可以从事设计工作,您的编码人员可以从事代码工作,而您的 CEO 可以看看销售数据。
希望对您有所帮助。
从您提供的信息来看,您做得很好。我认为您掌握了关注点分离,可能还有 MVC。我认为你应该仔细看看其他代码库中的东西是如何抽象,东西是如何模块化,并考虑你将如何处理这些东西可能会出现在 Web 开发中。
如果我想在每个控制器前添加一些代码 运行 怎么办?还是请求和控制器之间 运行 的中间件?或者在处理完每个控制器后向视图中注入一个变量?您如何分离 POST、GET、PUT、DELETE 逻辑,但仍将它们分组在一个资源中?其中一些可以通过您的体系结构实现,但我认为许多解决方案在 class-heavy 体系结构中会更清晰。当然,仁者见仁,智者见智。
发布到 public 的框架尽量通用并处理尽可能多的用例。我看到的一个问题是您假设最后调用控制器文件然后设置视图。因此,即使其中的逻辑处于全局状态,它也仅存在于该文件中。本质上,该文件充当命名空间。我不认为这是通用 Web 框架应该做出的假设,但这是您在为自己编写内容时可以摆脱的东西。