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

C# 在asp.net mvc中编写查询的正确位置,c#,asp.net,asp.net-mvc,entity-framework,entity-framework-5,C#,Asp.net,Asp.net Mvc,Entity Framework,Entity Framework 5,假设我有一个博客,里面有不同作者的文章,作者应该可以看到他们写了什么文章 现在,我使用实体框架的db上下文编写一个查询 现在的问题是,在控制器或模型类的特定操作方法中,查询应该放在哪里 我是一个新手,这件事让我很困惑。我会将这些类型的查询放入存储库类;这样,您就可以在应用程序的多个部分中使用相同的查询。这取决于应用程序的层。事实上,MVC并不重要。你有数据层吗?如果是这样的话,它就去那里了 这有点像在WinForms应用程序中询问查询的位置。同样,如果这是一个非平凡的应用程序,那么您可能有一个U

假设我有一个博客,里面有不同作者的文章,作者应该可以看到他们写了什么文章

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

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


我是一个新手,这件事让我很困惑。

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

这取决于应用程序的层。事实上,MVC并不重要。你有数据层吗?如果是这样的话,它就去那里了

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

在MVC应用程序中,控制器知道如何对视图中的事件做出反应。在我开发的应用程序中,控制器将调用业务逻辑层,然后BLL将连接到数据层。这在普通的应用程序中可能有些过分,但我不确定你的应用程序有多广泛

BLL和DAL是你的模型。因此,简单的答案是:

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

控制器应尽可能精简 所以,最好将查询放在控制器操作之外,所有类型的持久性查询通常放在存储库()或某个业务逻辑层,这实际上取决于应用程序的复杂性

简言之,存储库模式实际上是指应用程序中只有一个位置包含持久性知识以及如何查询持久性,通常我们可以在其中找到操作。通常,每个“域上下文”(订单、博客文章等)都有一个存储库

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


因为。想想看。如果您有
OrderController
,然后让我们假设一个
speciallordercontroller
但两者都需要订单数据,该怎么办?在这种情况下,查询代码会重复,如果是存储库模式,则可以避免此“陷阱”。正如您所知,原则是我们工艺中最伟大的原则之一。

+1实际上,这是一个有趣的问题。我发现很多时候人们对这类事情感到困惑。简短的回答是,这取决于(您是否执行了任何逻辑?),答案几乎总是模型类,但我将等待有人提供答案,解释asp.net MVC的MVC在这方面的概念。我同意这是一个好问题。但在这个论坛上每周都有人问这个问题。通过搜索Skinny控制器与Skinny模型,可以获得大量信息。但最重要的是,这不是讨论这个问题的论坛。SE程序员论坛是这个团队的好地方。正如我所说,我是一个真正的noob程序员,对设计模式一无所知。我不想讨论,只是想讨论人们是如何做的,或者微软建议如何做的。因为在包含示例代码的情况下,似乎所有内容都进入了控制器操作。如果模型是DTO的一种形式(我相信是这样),那么可能会有所帮助。逻辑进入控制器或从控制器中逐出。这包括查询。假设这只是一个非常简单的琐碎博客。我认为你真的应该把查询排除在控制器之外,除非它非常琐碎,没有其他人会使用它。这里有一个很好的答案:
OrderController -> OrderRepository -> Persistance
CreateOrderAction -> SaveOrder -> Query