model-view-controller - 在 MVC Web 应用程序中,谁负责过滤大量对象、 View 或模型?

标签 model-view-controller architecture

我有一个基于 MVC 设计构建的 Web 应用程序。

我有一个数据库,其中包含大量对象(论坛线程),我无法立即将其加载到内存中。我现在想用不同的过滤器来显示这个集合(的一部分)(有点像 stackoverflow 对按日期、投票、标签等排序的问题所做的那样)。

在哪里实现过滤逻辑?在我看来,这必须进入应用程序的模型部分,因为只有模型与数据库交互(在我的实现中)。如果我将过滤作为 View 的一部分,那么 View 必须直接访问数据库才能获取过滤对象的列表,对吧?我想避免这种情况,因为它会将数据库布局暴露给 View 。但与此同时,显示相同数据的不同 View 应该在应用程序的 View 部分中实现,因为它们就是这样——相同数据的不同 View 数据。

那么我该如何解决这个问题呢?我是否要创建一个附加模型(例如 FilteredThreadsList),并让它记住要使用的过滤器,然后使用 FilteredView 来显示 FilteredThreadsList 吐出的线程列表?

或者我是否必须构建一个ThreadQueryier,允许 View 在数据库中查询某些线程对象,这样我就可以在 View 中拥有过滤逻辑,而无需暴露数据库后端?

最佳答案

您永远不应该从 View 中查询数据。我不知道您具体使用什么框架,但对于 Ruby on Rails(其他框架应该相同),我们总是从 Controller 中提取必要的数据并将所有这些信息存储到变量中。该变量将由 View 访问,这可以帮助您避免直接从 View 查询数据库。如果 Controller 中查询数据库的代码太长,请将该代码插入到模型中,以便您的项目更易于维护 future 。此外,如果需要,您可以从应用程序中的多个位置调用此模型方法。祝你好运!

关于model-view-controller - 在 MVC Web 应用程序中,谁负责过滤大量对象、 View 或模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5209615/

相关文章:

wcf - Node.js 在 Microsoft/Azure/WCF/MVC 项目中适合什么位置?

Objective-C 插件架构安全性(Mac,不是 iPhone)

c++ - 辅助函数 : static in cpp or define as static helper class method

.net - Windows体系结构中的CLR,Win32,WinRT

architecture - 从字段中分离单词的逻辑操作

php - 用 PHP 学习 OO

model-view-controller - asp.net MVC ActionFilter 用于删除结果中的空行

c# - 无法将类型 'System.String' 转换为类型 'System.Object'。 LINQ to Entities 仅支持转换实体数据模型基元类型

model-view-controller - 我应该测试我的 Controller (MVC)吗?

javascript - 构建庞大的应用程序 Assets