我正在使用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页
用户可以通过从Info System
登录来输入website
。
在投票结束之前发表评论,以便我可以学到一些东西。
答案 0 :(得分:6)
您的问题是关于项目的基础设施,这取决于很多因素。
考虑您在问题中提供的信息:
我计划将来在桌面应用程序中转换这个项目。
为了便于使用,您应该将Data Access Layer
放在一个单独的项目中。
如果您有兴趣获取有关项目基础结构的更多信息,我建议您:Microsoft Spain - Domain Oriented N-Layered .NET 4.0 Sample App有详细记录,并为您提供生成企业级应用程序所需的大量信息。
答案 1 :(得分:4)
MVC背后的想法是 SEPARATION 。如果任何逻辑或数据访问都应该进入控制器,我不会想太多。我创建的大多数站点和应用程序最终都使用API项目,因此很容易将数据库访问权限放在那里。这最终取决于你,并归结为一个问题:我想要一个有组织的解决方案吗?
这是一个非常敏感的主题,但我通过我的经验发现,拥有一个更有条理的解决方案/项目将在以后更好地实践。由于您计划稍后转换为桌面应用程序,我强烈建议使用API将DAL移动到单独的项目中。这样,您只需编写代码一次。
答案 2 :(得分:2)
我认为没有必须遵守规则。每个人都有自己的方法。在我的应用程序中,我正在使用静态助手类创建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);
}
这是我的方法。对我来说足够合乎逻辑。
答案 3 :(得分:1)
到目前为止,在我的所有工作中,我们创建了一个单独的DAL项目来放入我们所有的数据库调用。但我的意思是我认为它只是用于组织和保持分离。如果它是一个较小的项目,我认为只是将它放在一个单独的类中就可以了。我不确定在模型中,对我有意义。
答案 4 :(得分:1)
您可以创建DAL文件夹或者您可以创建单独的DAL项目来编写数据访问代码
答案 5 :(得分:1)
让我们说我在购物车场景中涉及以下步骤:
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; }
}
<强> Project.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
<强> Project.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);
}
}
<强> 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