MVC 与前端控制器混淆

2024-04-10

** 简化问题 **

我正在学习 oop 模式,并且希望构建自己的简单 mvc 框架。我希望它有一个前端控制器,但我发现很难找到任何可靠的信息来使用 MVC 实现前端控制器。

特别是我很困惑前端控制器是否应该启动整个三元组,或者前端控制器是否只是简单地调用控制器而其他部分完成其余的工作。

我注意到诸如路由、路由器和引导程序之类的类,我想知道这些特定类的作用以及它们是否依赖于前端控制器本身。


实际上这不是一个问题,您只是想获得有关如何在构建您自己的 MVC 框架时继续进行的建议。 因此,我将尝试提供与您的问题一样通用的答案/考虑因素。

1) “我正在学习 OOP 模式”:模式在错误的人手中既强大又危险。我想说的是,你应该开始构建你的固件,而不是仅仅因为它被大公司使用或谈论,就试图使用你在网上遇到的每一种模式。你可以refactor您稍后编写代码,为每个步骤提供更高级别的抽象:这自然会涉及使用您将要阅读的模式并更好地理解它们。

2)“对前端控制器是否应该启动整个三合会感到困惑”:这取决于哪个级别coupling你的目标是在你的 mvc 中包含。 您可以让前端控制器处理所有事情,例如:

  1. bootstrap:加载配置并实例化数据库连接等
  2. 请求:获取描述所询问内容的所需数据
  3. 路由:处理请求
  4. 响应:返回所询问的内容

但是如果其他地方需要配置怎么办?也许在 CLI 运行脚本中?您自然会从路由器上分离引导组件,以便在其他需要的地方使用它。其他组件也是如此。

3)“路由、路由器和引导程序等类”。 想象一下让你的大班级处理所有事情。你会怎样testing你的方法?您会使用不同的输入手动调用脚本吗?每个测试方法都必须同时检查输入、路由和输出吗? 为前端控制器中涉及的每个组件提供抽象级别,将其封装在适当的类/对象/模块中,将为您提供更好的测试能力。

我这么说是因为在创建你所说的内容之前我已经沿着这条路走了:https://github.com/OverKiller/PHP-Router https://github.com/OverKiller/PHP-Router

但我不得不面对艰难的测试能力和深度耦合。 我很快就会重写它,抽象出请求、路由和响应组件。 但我有我的经验,我为此感到自豪!

你也应该这样做。 我想说的是:不要尝试一次性构建下一个 Ultimate SymZendCakeIgniter PHP 框架。 花点时间,花点时间阅读,花点时间学习。 看在上帝的份上:*甚至在阅读有关设计模式的任何内容之前,先阅读一本关于设计模式的好书T-E-S-T-I-N-G

我希望我是有用的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC 与前端控制器混淆 的相关文章

  • 在php中设置数据库中的会话

    如何使用 php 和 mysql 在数据库表中使用会话 您需要创建一个像这样的对象 class SessionHandler private static lifetime 0 private function construct obje
  • 如何从循环内的字符串中删除最后一个字符

    我正在尝试在 xml 中的一行中打印所选的不同类别 喜欢
  • 在 php unlink 中使用通配符

    我目前正在制作一个 php 脚本来绘制数据库中的一堆数据 将其排列到文本文件中 然后运行 GNUPlot 脚本来生成图表 我已经完成了所有这些工作 现在我需要做的就是删除我不再需要的文本文件 我一直在尝试的内容是从不同论坛上的另一个帖子中获
  • 如何仅在 PHP 中使用 str_replace() 删除文本一定次数?

    我试图从字符串中删除单词 John 一定次数 我在 php 手册上读到 str replace 除了第四个参数 count 所以我想可以用来指定应该删除多少个搜索实例 但事实似乎并非如此 因为以下情况 string Hello John h
  • 如何通过 md5 比较图像?

    该方法是否比较图像的像素值 我猜它不会起作用 因为它们的尺寸彼此不同 但如果它们相同但格式不同怎么办 例如 我截图并保存为 jpg另一个并保存为 gif MD5哈希是实际的二进制数据 因此不同的格式将具有完全不同的二进制数据 因此 要使 M
  • IIS7 和 MVC 2 出现 403.14 错误 已尝试了所有建议的修复方法

    ASP Net 4 框架上的 MVC 2 项目 我尝试在 IIS7 上设置它 但出现 403 14 错误 是的 我尝试了微软的修复 它启用了目录浏览 但与我想要的完全错误 是的 我运行了 aspnet regiis i 不 它仍然无法正常工
  • Doctrine2 与条件的关联映射

    是否可以与教义 2 4 中的条件进行关联映射 我有实体文章和评论 评论需要管理员批准 评论的批准状态存储在布尔字段 approved 中 现在我有 OneToMany 关联映射到实体文章中的评论 它映射了所有评论 但我只想映射批准的评论 就
  • Yii urlManager URL 中的语言

    我正在尝试使用以下语法向 url 添加语言 http www example com en site page view about http www example com en site page view about 到目前为止 我所
  • 递归树遍历 - 如何跟踪递归级别?

    我基本上试图从表示树结构的多维数组构建 html ul li 嵌套列表 下面的代码工作正常 但我想改进它 我需要一种方法来跟踪递归级别 以便我可以将不同的类应用于不同的级别 向生成的输出添加缩进等 function buildTree tr
  • 字符串的渐进单词组合

    我需要获得字符串的渐进单词组合 例如 这是字符串 输出 这是字符串 这是 这个字符串 是字符串 这 是 细绳 你知道类似的算法吗 我需要php语言 谢谢 这是解决您问题的简单代码 我将每个字符串递归地连接到数组中的其余字符串 string
  • 使用 php 将 swf 转为 pdf

    有没有办法使用 php 将 SWF 转换为 pdf 我的意思是该页面有一个按钮 单击它必须将 swf 内容导出为 pdf 格式 您可以尝试的一种方法是使用ffmpeg http www ffmpeg org 使用 image2 输出编解码器
  • MySQL分层存储:搜索所有父母/祖父母等。给定子节点 id 的节点?

    我使用分层模型存储类别 如下所示 CATEGORIES id parent id name 1 0 Cars 2 0 Planes 3 1 Hatchbacks 4 1 Convertibles 5 2 Jets 6 3 Peugeot 7
  • 将平面数组拆分为分组子数组,其中包含输入数组中连续键的值

    我有一个数组array diff函数 如下所示 Array 0 gt world 1 gt is 2 gt a 3 gt wonderfull 5 gt in 6 gt our 正如您所看到的 键 3 和键 5 之间有一个间隙 即没有键 4
  • 避免刷新时上传图片

    我正在使用最简单的图像上传形式 我非常希望保持这种方式 只需要一些 php 代码看起来像这样
  • Yii:使用与控制器布局不同的布局渲染动作

    在 Yii 中 有没有办法使用不同的方式渲染单个动作layout比为控制器定义的值 我有一个操作希望其格式与其他操作不同 并且文档中不清楚这是否可能 我相信您可以调用该操作 layout多变的 public function actionY
  • 处理照片上传的最佳方式是什么?

    我正在为一个家庭成员的婚礼制作一个网站 他们要求的一个功能是一个照片部分 所有客人都可以在婚礼结束后前往并上传他们的照片 我说这是一个很棒的想法 然后我就去实现它 那么只有一个问题 物流 上传速度很慢 现代相机拍摄的照片很大 2 5 兆 我
  • 单击保存文件

    我希望能够通过单击下载 csv 文件 而不是在浏览器中打开 我把这段代码 a href file csv download file a 但单击它会在浏览器中打开 v 文件 在本地主机中 当我单击链接时 它正在下载 但在服务器上时 它在浏览
  • 在 Angular 6 中添加 Xsrf-Token 时出现问题

    通过 API 提交的表单中的数据已成功发布 但是将 X CSRF TOKEN 添加到标头并设置后withCredentials true结果数据未发布到名为的脚本insert php Error 加载失败http localhost sim
  • APC 将数据存储在哪里?

    我想用apc store 缓存一些结果 但我需要知道数据将存储在哪里 以及限制是什么 它总是存储在内存中吗 或者也写入磁盘 我希望将不经常访问的数据存储在磁盘上 我应该为此使用不同的缓存系统吗 这就是极限了吗 apc shm size 32
  • PHP Session Id 在页面之间发生变化

    我有一个问题 我在 2 个页面之间丢失了 PHP 会话 session start 包含在一个名为 session inc php 的文件中 该文件包含在每个需要设置会话的页面中 这适用于网站上除一个特定页面 member profile

随机推荐

  • scrollIntoView() 不会滚动到任何地方

    我无法得到Element scrollIntoView 上班 我有下面的代码 根据某些变量 它应该滚动到两个位置 但是 它不会滚动到其中任何一个 我究竟做错了什么 class Page extends Component scrollToM
  • 如何在mvc3,C#中显示数字到小数点后两位? [复制]

    这个问题在这里已经有答案了 可能的重复 使用字符串格式显示最多 2 位小数或简单整数 https stackoverflow com questions 6951335 using string format to show decimal
  • Socket.io 适用于 localhost,但不适用于 Heroku 服务器

    我目前正在尝试使用socket io 和node js 服务器与Unity 脚本进行通信 我已将所有内容连接起来并与 localhost 一起使用 但由于某种原因 当我将其移植到 Heroku 服务器时 它无法连接 我假设它可能与 URL
  • Python、paramiko、invoke_shell 和丑陋的字符

    当我运行下面的 Python 代码时 import workflow import console import paramiko import time strComputer server com strUser user strPwd
  • 在 Python 3.6 中将 ABCMeta 与 __init_subclass__ 组合时出现类型错误

    我正在尝试使用 python 3 6 的新功能 init subclass 特征 PEP 487 https www python org dev peps pep 0487 与abc模块 它似乎不起作用 以下代码 from abc imp
  • 应用程序传输安全已阻止明文 HTTP 资源

    我在 swift 中使用 Socket IO 库 但不断收到此错误 应用程序传输安全已阻止明文 HTTP http 资源 加载 因为它不安全 可以通过以下方式配置临时例外 您应用程序的 Info plist 文件 当我尝试发送 http 请
  • 我想为 Linux 内核做出贡献 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Kotlin when() 局部变量介绍

    假设我有一个昂贵的函数 名为doHardThings 它可能返回各种不同的类型 我想根据返回的类型采取行动 在 Scala 中 这是一个常见的用法match构造 def hardThings doHardThings match case
  • 使用 Vue.js 确定放置坐标是否位于另一个元素上方?

    我正在使用vue 可拖动 可调整大小 https github com mauricius vue draggable resizable组件将给出 x y 偏移坐标 说明我的元素在页面上的放置位置 一切都很好 但是 我想知道是否有办法确定
  • 如果我在函数中导入模块,变量是局部变量吗?

    如果我在函数 本地范围 内导入 python 3 中的模块 导入的内容是否是该函数的本地内容 Like def test import math s math cos 1 s math cos 1 是的 该模块将是该函数的本地模块 至少在上
  • 哪个元素导致水平滚动条?自动检测[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 隐藏或删除导航栏按钮项目中的特定项目,Swift 4

    从导航栏中隐藏或删除特定按钮项目UIBarButtonItem这是从故事板给出的 例如右侧导航栏项目我添加了 3UIBarButtonItem就像情节提要中的 完成 取消 下一步 现在我想根据用户登录以编程方式从导航栏中删除或隐藏 取消 按
  • ADT插件会自动创建ant构建文件吗?

    几个月前我创建了一个 Android 项目 现在必须使用 Hudson 自动化构建过程 Android 开发指南提到了一个 build xml 文件 该文件在生成项目时创建 http developer android com guide
  • 多语言 PHP 应用程序:最佳实践?

    我想获得您对我在 PHP MVC Web 应用程序上实现多语言支持的方式的反馈 我就是这样做的 在 app 文件夹中 我创建了一个 linguals 文件夹 其中包含每种语言一个文件 english php spanish php 等 每个
  • .htaccess 将子域重写到目录

    是否可以使用 htaccess将子域重写为目录 Example http sub domain example 显示内容 http domain example subdomains sub 尝试将其放入您的 htaccess file R
  • 服务和活动之间沟通的最佳方式是什么?

    现在 Activity 可以使用以下三种方式之一连接到服务 广播接收器 http developer android com reference android content BroadcastReceiver html 信使 http
  • FAILED 错误:java.io.IOException:所有收集器的初始化失败

    我在运行 MapReduce WordCount 作业时遇到一些错误 错误 java io IOException 所有收集器的初始化 失败的 最后一个收集器中的错误是 class wordcount wordmapper at org a
  • Webpack - extract-text-webpack-plugin 找不到模块

    webpack config js var ExtractTextPlugin require extract text webpack plugin 如果我刚刚实现该插件 我会立即收到此错误 module js 339 throw err
  • URLLoader 数据到 BitmapData

    我正在尝试加载 SWF 文件旁边的图像文件 像这样的东西 var loader URLLoader new URLLoader loader dataFormat URLLoaderDataFormat BINARY loader addE
  • MVC 与前端控制器混淆

    简化问题 我正在学习 oop 模式 并且希望构建自己的简单 mvc 框架 我希望它有一个前端控制器 但我发现很难找到任何可靠的信息来使用 MVC 实现前端控制器 特别是我很困惑前端控制器是否应该启动整个三元组 或者前端控制器是否只是简单地调