我正在构建一个MVC,其中所有东西都是一个模块。这将使我能够分离像论坛和用户模块这样的对象集合,以进一步组织我的MVC。
/blog
/controller
/model
/view
/user
/controller
/model
/view
/forum
/controller
/model
/view目前,我将类似于forum/edit/34的路由映射到包含Forum_Controller_Edit类的/forum/controller/edit.php。(这与所有操作都是控制器Forum_Controller::edit()__的方法的标准方法略有不同)。这允许我将控制器的所有单独的“操作”分离到他们自己的文件中,这样我就不必用10个不同的操作来管理大型控制器了。
不管怎样,问题就在这里。假设我想向模块中添加新的控制器。例如,让我说我想有论坛主题(forum/topic/view/34)。我可以创建一个新的“主题”模块。
/forum
/controller
/model
/view
/topic
/controller
/model
/view但是,我必须使用像/topic/view/这样的URL,而不是forum/topic/view,2)我会分离相关的组件(主题应该是论坛模块的一部分),3)如果我想的话,我现在无法为类似内容节点的东西创建一个通用的“主题”模块。
那么,我如何在每个模块中允许多个控制器(具有多个动作)的同时,构建一个模块化的MVC呢?
Kohana框架决定实现一个HMVC来解决这个问题。但是,这会导致许多is_file()检查,以找到要加载的文件的正确位置。对于商品硬件来说,I/O检查非常宝贵,所以我不认为这是一种选择。此外,在使用同名的多个类时,还不清楚加载的类的哪个版本会导致混淆。
我想找到这个问题的解决方案,它不涉及预先设置路径或检查正确类的文件夹。然而,在我看过的过去的20个框架中,它们似乎对这个普遍的问题没有一个很好的答案。有人有什么想法吗?
路由更新
如果我要实现路由,它将如何工作?我将如何处理第一层(/forum)、第二层(/论坛/视图)和第三层(/论坛/主题/视图)?我的路由如何知道第三级路由和带有参数的二级路由之间的区别?换句话说,我的系统会尝试做哪一个?(鉴于URI为“论坛/主题/视图/34”)
$controller = new \Forum\Controller\Topic\View;
$controller->action('34');
// or
$controller = new \Forum\Controller\Topic;
$controller->view('34');
// or
$controller = new \Forum\Controller;
$controller->topic('view', '34')路由更新2
以凯尔斯建议为例,我决定所有控制器都需要一个路由集,这将允许我在URL路径“论坛/主题/视图/34”路径之上定义哪些类。毕竟,每个URL都很重要,不应该基于现有的文件系统结构。我相信他说得对,URL设计应该比我们经常给予的更多的关注。
发布于 2011-05-10 15:21:59
我想找到一个不需要预先设定路径的解决方案。
这就是所谓的路由,就是的解决方案。
在我看过的20个框架中,它们似乎对这个普遍的问题没有一个很好的答案。
通用的解决方案是路由。
这正是框架使用它的原因。路由是在保持您的体系结构的同时,仍然具有您的URI的灵活性的方法。否则,URI命名将始终必须符合MVC布局。
发布于 2011-05-10 15:52:15
我认为你可能过于关注“速度”--框架是为了加速开发,以便迅速地把想法提出来。
一旦一个网站被开发和运行,如果它变得流行,开发人员可以尝试修复瓶颈,以提高性能。网站很少会达到需要修复磁盘I/O瓶颈的地步,但如果这样做,大多数框架都有一个简单的解决方案,就是在文件中静态地定义路由。
也许,与其尝试发明某种新的路由方法,相反,您应该拥有一些工具来帮助解决这个瓶颈,而且只有当它成为使用您的框架的人的问题时才能帮助解决。
两种可能的解决办法是:
https://stackoverflow.com/questions/5952290
复制相似问题