在asp.net mvc中编写查询的正确位置
本文关键字:查询 位置 asp net mvc | 更新日期: 2023-09-27 18:03:11
假设我有一个博客,上面有不同作者的文章,作者应该能够看到他们写了什么文章。
现在我用实体框架的db上下文写一个查询。
现在的问题是,在控制器或模型类的特定动作方法中,查询应该去哪里。
我是个新手,这件事一直让我很困惑。
控制器应该尽可能精简
所以放置查询的最佳位置是在控制器动作之外,通常用于所有类型的持久性查询的位置是存储库(Repository Pattern)或某些业务逻辑层——这实际上取决于应用程序的复杂性。简而言之,Repository Pattern实际上是指应用程序中只有一个地方包含持久性知识以及如何查询它,通常我们可以在那里找到CRUD操作。通常,每个"域上下文"(订单、博客文章等)都有一个存储库。
例如(一个小应用程序的工作流):
OrderController -> OrderRepository -> Persistance
CreateOrderAction -> SaveOrder -> Query
因为。想想看。如果有OrderController
和SpecialOrderController
,但两者都需要Order数据呢?在这种情况下,您将以查询代码重复告终,如果使用存储库模式,则可以避免此"陷阱"。如你所知,DRY原则是我们工艺中最伟大的原则之一。
这取决于应用程序的层。其实它是MVC并不重要。你有数据层吗?
这有点像问你的查询在WinForms应用程序中的位置。同样,如果这是一个重要的应用程序,你可能有一个UI,可能是一个服务层,一个业务逻辑层和一个数据层。数据层是你查询的地方。
在MVC应用中,控制器知道如何对视图中的事件做出反应。在我开发过的应用程序中,控制器将调用业务逻辑层,然后BLL将连接到数据层。这对于琐碎的应用程序来说可能是多余的,但我不确定您的应用程序有多广泛。
BLL和DAL是你的模型。所以,简短的答案是:
查询属于模型,而不是控制器。
我会把这些查询放到一个存储库类中;这样,您就可以在应用程序的多个部分使用相同的查询。