我有一个基于 MVC 设计构建的 Web 应用程序。
我有一个数据库,其中包含大量对象(论坛线程),我无法立即将其加载到内存中。我现在想用不同的过滤器来显示这个集合(的一部分)(有点像 stackoverflow 对按日期、投票、标签等排序的问题所做的那样)。
我在哪里实现过滤逻辑?在我看来,这必须进入应用程序的模型部分,因为只有模型与数据库交互(在我的实现中)。如果我将过滤作为视图的一部分,那么视图必须直接访问数据库才能获取过滤对象的列表,对吧?我想避免这种情况,因为它会将数据库布局暴露给视图。但同时,显示相同数据的不同视图should在应用程序的视图部分中实现,因为它们只是不同的views相同的数据。
那么我该如何解决这个问题呢?我是否要创建一个附加模型(例如 FilteredThreadsList),并让它记住要使用的过滤器,然后使用 FilteredView 来显示 FilteredThreadsList 吐出的线程列表?
或者我是否必须构建一个 ThreadQueryier 来允许视图在数据库中查询某些线程对象,这样我就可以在视图中拥有过滤逻辑而无需暴露数据库后端?
您永远不应该从视图中查询数据。我不知道您具体使用什么框架,但对于 Ruby on Rails(其他框架应该相同),我们总是从控制器中提取必要的数据并将所有这些信息存储到变量中。该变量将由视图访问,这可以帮助您避免直接从视图查询数据库。如果控制器中查询数据库的代码太长,请将该代码插入到模型中,以便您的项目更易于维护未来。此外,如果需要,您可以从应用程序中的多个位置调用此模型方法。祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)