C# 应在ASP.NET MVC中放置查询的位置

C# 应在ASP.NET MVC中放置查询的位置,c#,asp.net,asp.net-mvc,asp.net-mvc-4,n-tier-architecture,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,N Tier Architecture,我正在使用ASP.NETMVC,用Framework4.0和SQLServer2008构建一个ERP。 我的问题是查询应该放在哪里?我在冲浪时看到了多种方法。其中很少有如下内容: 在型号中 在DAL文件夹中的单独文件中 在单独的DAL项目中 经过研究后,我仍然对在模型中使用查询感到困惑 更多信息: 我使用的是简单的查询方法,而不是Linq和entityframework 我还计划在将来将此项目转换为桌面应用程序。 另一个问题是业务逻辑如何在ASP.NET MVC中工作 项目详情 这是一个公司

我正在使用ASP.NETMVC,用Framework4.0和SQLServer2008构建一个ERP。
我的问题是查询应该放在哪里?我在冲浪时看到了多种方法。其中很少有如下内容:

  • 型号中
  • 在DAL文件夹中的
    单独文件中
  • 单独的DAL
    项目中
经过研究后,我仍然对在
模型中使用查询感到困惑

更多信息:
我使用的是简单的查询方法,而不是
Linq
entityframework

我还计划在将来将此项目转换为桌面应用程序。

另一个问题是
业务逻辑如何在
ASP.NET MVC
中工作

项目详情
这是一个公司的
网站
+
在线信息系统
,两者都有大约40-50页。
用户可以从
网站
登录进入
信息系统


在投票结束之前,请留下评论,以便我能学到一些东西。

我认为没有必须遵守的规则。每个人都有自己的方法。在我的应用程序中,我正在使用静态助手类创建
Helpers
文件夹。例如,创建
类DBLogic

public static class DBLogic
{
   public static List<Clients> GetAllClient()
   {
     //**your query here
      return //**some result
    }
}

这是我的方法。对我来说,逻辑已经足够了。

到目前为止,在我所有的工作中,我们创建了一个单独的DAL项目,将所有的数据库调用放入其中。但我的意思是,我认为这真的只是为了组织和把事情分开。如果它是一个较小的项目,我想把它放在一个单独的类就可以了。不过,我不确定模型中的内容,这对我来说没有意义。

你的问题是关于一个项目的基础设施,它取决于许多因素

考虑到您在问题中提供的信息:

我有一个计划,也转换在桌面应用程序在未来的这个项目

为了可用性,您应该将数据访问层
放在一个单独的项目中

如果您对获取有关项目基础设施的更多信息感兴趣,我建议您:这是一个有很好的文档记录的项目,并为您提供了生成企业级应用程序所需的大量信息。

MVC背后的理念是分离。我不认为控制器中应该有任何逻辑或数据访问。我创建的大多数站点和应用程序最终都使用API项目,因此很容易在其中加入DB访问。最终由你决定,归结到一个问题:我想要一个有组织的解决方案吗


对于大多数人来说,这是一个敏感的话题,但我通过自己的经验发现,有一个更有条理的解决方案/项目将有助于以后更好的实践。由于您计划稍后转换为桌面应用程序,我强烈建议将DAL移动到使用API的单独项目中。这样,您只需编写一次代码。

您可以创建一个DAL文件夹,也可以创建一个单独的DAL项目来编写数据访问代码。

假设我在购物车场景中,该场景包括以下步骤:

  • 从数据库获取购物车
  • 计税
  • 全部
  • Project.Core(具有所有域类)

    Project.Web

    public class CartController
    {
       CartBLL cartBLL = new CartBLL();
       public ActionResult Index(int Id)
       {
           var cartDetails = cartBLL.GetCartDetails(Id);
    
           // Make a cartViewModel
    
           View(cartViewModel);
       }
    }
    
    Project.WPF

    //Nothing much changes in desktop comapared to Web, just call the BLL stuff and you are set
    CartBLL cartBLL = new CartBLL();
    var cartDetails = cartBLL.GetCartDetails(Id);
    //Populate view
    

    因此,基本上,您必须在所有前端项目中重用您的BLL

    您正在尝试选择一种体系结构,除非您提供更多有关应用程序、需求等的信息,否则无法回答此问题。我忘记了应用程序的详细信息。我更新了在处理小型项目时,将数据访问保持在模型中是一个常规吗?你说“逻辑或数据访问不应进入控制器”我想了解模型。@syedmohsin我会避免将数据访问放在模型中。它们通常负责数据的表示,而不负责获取或发送数据。BLL不应引用DAL。通常我在BLL中定义业务实体(我认为它们属于那里),并从DAL中引用BLL。BLL还包含抽象存储库/上下文/的接口,DAL实现了一个,并使用一些DI将它们粘合在一起。我同意,我不想在OP似乎刚刚开始的时候将其与DI等复杂问题混淆。
    public class CartDAL  
    {
      public List<CartItem> GetCart(int cartId)
      {
         //execute sql here, get datareader or datatable
         //loop thru the rows and mait into a List<CartItem>
    
         return List<CartItem>
      }
    }
    
    public class CartBLL
    {     
      CartDAL cartDAL = new CartDAL();
      public CartDetails GetCartDetails(int cartId)
      {
         var cartDetails = new CartDetails();
         cartDetails.CartItems = cartDAL.GetCart(cartId);
         cartDetails.Tax = cartDAL.GetCart(cartId);
         cartDetails.Total = cartDAL.GetCart(cartId); 
         return cartDetails;
      }
    }
    
    public class CartController
    {
       CartBLL cartBLL = new CartBLL();
       public ActionResult Index(int Id)
       {
           var cartDetails = cartBLL.GetCartDetails(Id);
    
           // Make a cartViewModel
    
           View(cartViewModel);
       }
    }
    
    //Nothing much changes in desktop comapared to Web, just call the BLL stuff and you are set
    CartBLL cartBLL = new CartBLL();
    var cartDetails = cartBLL.GetCartDetails(Id);
    //Populate view