ASP.NET MVC中应放置查询的位置
本文关键字:查询 位置 NET MVC ASP | 更新日期: 2023-09-27 18:30:13
我使用ASP.NET MVC,使用Framework 4.0和SQL Server 2008构建ERP。
我的问题是查询应该放在哪里?我在冲浪时看到了多种方法。其中很少有如下所示:
- 在
Models
中 - 在
Separate Files
中,位于DAL文件夹中 Separate DAL
项目
经过研究,我仍然对在Models
中使用查询感到困惑。
进一步信息:
我使用的是简单的查询方法,而不是Linq
和Entity Framework
我计划将来也将这个项目转换为Desktop Application
另一个问题是,如果我使用business Logic
,它在ASP.NET MVC
中是如何工作的?
关于项目的详细信息
它是一家公司的Website
+Online Information System
,两者都有大约40-50页
用户可以通过从website
登录进入Info System
。
在投票结束之前留下评论,这样我就可以学到一些东西。
您的问题是关于一个依赖于许多因素的项目的基础设施。
考虑到您在问题中提供的信息:
我有一个计划,也转换这个项目在桌面应用程序在未来。
为了可用性,您应该将Data Access Layer
放在一个单独的项目中。
如果您有兴趣获得有关项目基础设施的更多信息,我建议您:Microsoft Spain-Domain Oriented N-Layered.NET 4.0示例应用程序,该应用程序文档齐全,可为您提供制作企业级应用程序所需的大量信息。
MVC背后的理念是分离。我不太认为控制器中应该有任何逻辑或数据访问。我创建的大多数站点和应用程序最终都会使用API项目,因此它可以很容易地将DB访问权限放入其中。这最终真的取决于您,归结为一个问题:我想要一个有组织的解决方案吗
对大多数人来说,这是一个敏感的话题,但通过我的经验,我发现拥有一个更有组织的解决方案/项目将有助于以后更好的实践。由于您计划稍后转换为桌面应用程序,我强烈建议将DAL移动到使用API的单独项目中。这样,您只需要编写一次代码。
我认为没有必须遵守的规则。每个人都有自己的方法。在我的应用程序中,我正在创建带有静态助手类的Helpers
文件夹。例如,创建class DBLogic
:
public static class DBLogic
{
public static List<Clients> GetAllClient()
{
//**your query here
return //**some result
}
}
在您的控制器中,当您需要客户端列表时
public ActionResult Index()
{
var clients = DBLogic.GetAllClient()
return View(clients);
}
这就是我的方法。对我来说已经足够合乎逻辑了。
到目前为止,在我的所有工作中,我们都创建了一个单独的DAL项目来放入我们所有的数据库调用。但我的意思是,我认为这实际上只是为了组织和保持独立。如果这是一个较小的项目,我想把它放在一个单独的班级里就可以了。不过,我不确定模型中的内容,对我来说没有意义。
您可以创建DAL文件夹,也可以创建一个单独的DAL项目来编写数据访问代码
假设我在购物车场景中,该场景涉及以下步骤:
- 从数据库获取购物车
- 计算税款
- 合计所有内容
Project.Core(具有所有域类)
public CartItem
{
public int Id { get; set; }
public string Desc { get; set; }
}
public CartDetails
{
public int Id { get; set; }
public List<CartItem> CartItems { get; set; }
public Decimal Tax { get; set; }
public Decimal Total { get; set; }
}
项目.DAL
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>
}
}
查看Dapper或Massive,而不是像上面那样手动。
http://code.google.com/p/dapper-dot-net/
https://github.com/robconery/massive
项目.BLL
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;
}
}
Project.Web
public class CartController
{
CartBLL cartBLL = new CartBLL();
public ActionResult Index(int Id)
{
var cartDetails = cartBLL.GetCartDetails(Id);
// Make a cartViewModel
View(cartViewModel);
}
}
项目.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