5

我正在使用 ASP.NET MVC,使用 Framework 4.0 和 SQL Server 2008 构建 ERP。
我的问题是查询应该放在哪里?我在冲浪时看到了多种方法。其中少数如下:

  • Models
  • Separate Files, 在 DAL 文件夹中
  • Separate DAL项目中

我仍然对Models在研究后使用查询感到困惑。

更多信息:
我使用的是简单查询方法,而不是Linqand Entity Framework
我计划Desktop Application将来也将此项目转换为。

另一个问题是,如果我使用它,它business Logic的工作原理是什么?ASP.NET MVC

关于项目的详细信息
这是一家公司的Website+ Online Information System,两者都有大约40-50页。
用户可以Info System通过从 登录website

在投票结束之前发表评论,以便我可以学到一些东西。

4

6 回答 6

6

您的问题是关于取决于许多因素的项目的基础设施。

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

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

为了可用性,你应该把你的Data Access Layer放在一个单独的项目中。

如果您有兴趣获取有关项目基础架构的更多信息,我向您推荐:Microsoft Spain - Domain Oriented N-Layered .NET 4.0 Sample App,文档齐全,为您提供了制作企业级所需的大量信息应用。

于 2013-09-04T16:11:34.020 回答
4

MVC 背后的想法是分离。如果任何逻辑或数据访问都应该进入控制器,我不认为太多。我创建的大多数网站和应用程序最终都使用 API 项目,因此很容易将数据库访问放入其中。这最终取决于你,归结为一个问题:我想要一个有组织的解决方案吗?

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

于 2013-09-04T16:16:46.757 回答
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);
}

这是我的方法。对我来说足够合乎逻辑。

于 2013-09-04T16:06:43.623 回答
1

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

于 2013-09-04T16:08:16.880 回答
1

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

于 2013-09-04T19:15:01.880 回答
1

假设我在购物车场景中,涉及以下步骤:

  1. 从数据库中获取购物车
  2. 计算税金
  3. 总计一切

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;
  }
}

项目网站

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

于 2013-09-04T21:12:33.280 回答