首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >驱动程序与控制器(MVC)

驱动程序与控制器(MVC)
EN

Stack Overflow用户
提问于 2012-09-28 14:42:23
回答 1查看 211关注 0票数 0

我正在使用Codeigniter2.x,我最初使用控制器作为模块(虽然不是完全的HMVC),因为我有一个顶级控制器,可以调用其他低级控制器。我的想法是,由于这些较低级别的控制器仍在与这种观点进行交互,所以它们应该保持控制器而不是模型或司机。

然而,我发现控制器的每个实例也产生了一个新的CI实例。因此,对于每个请求,我将运行3或4个CI实例。大量的开销,也导致了会话问题。

此后,我将这些较低级别的控制器作为驱动程序移到库中。他们现在捕获构造方法中的CI实例,并对其进行修改。这使得使用起来非常好,并且不需要HMVC扩展。驱动程序也不能从外部调用,因此它允许我通过特定的入口点传递所有请求。

我的问题是,这在结构上是否正确。我一直认为驱动程序只应该修改通过方法调用提供的数据,但是这些驱动程序中的许多会直接从GET和POST中提取信息,虽然它们不会直接附加到视图中,但它们经常访问视图文件,并将处理后的视图传递给CI实例以进行输出。

编辑更多的上下文:我创建的驱动程序之一本质上是一个名为“Access”的用户登录驱动程序。它调用“User”模型来创建/登录/注销方法。驱动程序使用POST数据检查用户模型,然后用错误和所需内容加载正确的视图。我的想法是,使用两行代码,我可以在整个项目的任何控制器中包含这个驱动程序,因此代码冗余显着减少。同样,我知道驱动程序应该被限制在它们的作用域内,但是驱动程序不会修改它的作用域之外的任何内容,而只是返回它创建的视图。

还有另一种方法可以更好地与直接MVC相结合吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-28 15:12:38

我说不出是对是错。但如果我是你,我不会那么做的。我可能会重构一些代码。我会确保他们不会直接从$_GET$_POST超级全局抓取和操作数据。相反,将一些数据作为参数传递给函数调用。这将使测试更容易,因为您不必模拟GETPOST请求。虽然从技术上讲,您可以从代码中手动设置超级全局值,但我不建议这样做。以参数的形式提供数据要好得多,特别是如果您想编写要随后执行的测试用例。另外,让库与超出其自身的作用域交互可能会带来一些隐藏的问题。

在我看来,库应该是类似模块的东西,您可以在那里拖放,然后使用它们而不会有任何麻烦。如果您的代码确实需要从$_GET$_POST获取或操作值,那么它们可能应该是模型。此外,您可能需要考虑您的代码是否实际上是一个库。问问自己,这段代码在这个应用程序之外有用吗?或者,它是高度依赖的,只能对这个特定的应用程序有用吗?如果你对后者说是,那么它可能应该是一个模型,而不是一个库。最后一件事,你应该把视图留给控制器。只需从库/模型方法中返回所需的数据,然后从控制器将其传递给视图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12642194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档