C# 应在ASP.NET MVC中放置查询的位置
我正在使用ASP.NETMVC,用Framework4.0和SQLServer2008构建一个ERP。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中工作 项目详情 这是一个公司
我的问题是查询应该放在哪里?我在冲浪时看到了多种方法。其中很少有如下内容:
- 在
型号中
- 在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