在asp.net mvc中编写查询的正确位置

时间:2013-03-09 15:00:21

标签: c# asp.net asp.net-mvc entity-framework entity-framework-5

假设我的博客上有不同作者的帖子,作者应该可以看到他们写的文章。

现在我使用实体框架的db上下文编写查询。

现在的问题是查询应该放在控制器或模型类的特定操作方法中。

我有点新鲜,这件事让我感到困惑。

3 个答案:

答案 0 :(得分:4)

控制器应尽可能精益

因此,放置查询的最佳位置是在控制器操作之外,通常所有类型的持久性查询都是存储库(Repository Pattern)或某些业务逻辑层 - 实际上取决于应用程序的复杂性。

简而言之,Repository Pattern实际上是关于应用程序中只有一个地方包含持久性知识以及如何查询它,通常我们可以在那里找到CRUD个操作。通常,每个“域上下文”(订单,博客帖子......)都有一个存储库。

例如(小应用程序的工作流程):

OrderController -> OrderRepository -> Persistance
CreateOrderAction -> SaveOrder -> Query

由于。想一想。如果你有OrderController然后让我们说SpecialOrderController但两者都需要订单数据怎么办?在这种情况下,您最终会得到查询代码重复,如果存储库模式的情况下您避免使用此“陷阱”。如您所知DRY原则是我们工艺中最伟大的原则之一。

答案 1 :(得分:1)

我会将这些类型的查询放入存储库类中;这样,您就可以在应用程序的多个部分中使用相同的查询。

答案 2 :(得分:1)

这取决于您的应用程序的层。它的MVC无关紧要。你有数据层吗?如果是这样,它会去那里。

这有点像询问WinForms应用程序中的查询位置。同样,如果这是一个非平凡的应用程序,您可能有一个UI,可能是服务层,业务逻辑层和数据层。数据层就是您的查询所在。

在MVC应用程序中,控制器知道如何对视图中的事件做出反应。在我参与过的应用程序中,控制器将调用业务逻辑层,然后BLL将连接到数据层。这对于琐碎的应用程序来说太过分了,但我不确定你的应用程序有多广泛。

BLL和DAL是你的模特。所以,简短的回答是:

  

查询属于模型,而不属于控制器。