BLL和DAL之间的通信

sve*_*vit 7 .net c# vb.net data-access-layer bll

解决方案设置

  • DAL(班级图书馆)
  • BLL(类库)
  • Common(类库(一些常用功能 - 枚举,日志记录,异常......))
  • Application1(Windows应用程序)
  • Application2(Windows应用程序)
  • WebApp(Web应用程序)
  • ...

假设我有一个Customer实体,它是:

  • SQL Server中的一个表
  • DAL中的CustomerDataTable
  • BLL中的客户类
  • 所有应用程序中的BLL.Customer类

BLL和DAL应该用什么类型的对象进行通信 - DataTable或者List<Customer>(例如)?在第一种情况下,BLL逻辑应将Customer对象转换为DataTable并将其发送到DAL.在secod的情况下,DAL层应该知道Customer层,它位于BLL层中.但原始DLL引用DAL而不是相反......

我是否应该将所有类放入单独的程序集中,这是由所有其他类引用的(Common,BusinessObjects,...)?在这种情况下,我可以在所有项目中使用Customer类.

我知道,当我知道只有一个BLL会使用我的DAL时,我是否应该费心去分离DAL和BLL.在这种情况下,我可以将它们合并为一个项目.

PS - 我正在阅读关于DataTables的内容,很多人说我们根本不应该使用它们.有什么更好的选择?也许现在是我学习一些ORM映射工具的时候了:)

klm*_*lm_ 9

在我看来,你应该有另一个层(单独的DLL).就像"域名"一样,你会在哪里保留像Customer这样的所有实体.然后简单地在此程序集的层次结构中包含所有更高级别(DAL,BLL,UI和其他).

示例架构可能如下所示:

(数据库)< - > DAL < - > BL < - > UI

在所有级别上,您都可以访问"域"图层.DAL应该返回List而不是DataTable.在某些阶段,您可能希望在DAL中使用某些OMR(如NHibernate)的开发过程也可能返回List.

  • 我会将Customer类仅用作数据实体,因此只是属性而没有像"GetAllCustomers"这样的方法.我将放入BLL中使用DAL进行查询的方法. (2认同)