1

我正在开发一个 .Net 3.5 Web 应用程序。它有各种模块,例如客户、订单等。我需要使用 Enterprise Library 4.0 设计数据访问层 (DAL)(使用数据访问应用程序块或 DAAB)连接到 SQL Server 2005。这是我打算如何去做:

• 有一个名为“IDataService”的接口。它将有“ExecuteReader()”、“ExecuteScalar()”、“ExecuteNonQuery()”、“AddParams”等成员......基本上,这个接口几乎看起来像达布。

• 有一个名为“DataService”的类,它实现了这个接口。这个类将充当DAAB 的包装器,每个方法都将在内部使用DAAB 中的相应方法。

• 拥有像客户、数据等这样的业务类(或数据容器),它们的属性将映射到数据库中相应的表属性。

• 每个模块都有 DAL 类,如 CustomerDataService、OrdersDataService 等。这些类中的每一个都有构造函数代码,我将在其中实例化 DataService 类,如下所示: IDataService dataService= new DataService() 此外,这些类中的每一个都有如下方法: GetCustomerDetails() AddCustomer() RemoveCustomer() UpdateOrder 等这些方法将在内部使用“dataService”对象对数据库 ExecuteReader、ExecuteNonQuery 等进行任何操作

• 每个模块都有一个映射器类,如“CustomerMapper”、“OrderMapper”等。这些类将数据源(例如 IDataReader)作为输入,并将数据填充到通用集合(List)中。并且这些映射器类将由相应的 Dataservice 类在内部调用,以将类型安全的集合返回给调用客户端。

• 有一个像DbHelper 这样的帮助类,它会执行诸如“处理DBNull 案例”、“存储存储过程名称”等任务。

• DataService 类将被BusinessLogic 层类依次使用……即CustomerBusiness、OrdersBusiness 等。

• 业务逻辑层将集合返回到表示层。

这种设计有意义吗?这种方法的优点/缺点是什么?我能想到这种方法的优点是所有 DataService 类将始终针对接口“IDataService”进行编程,而无需知道“DataService”类是如何在内部实现的。因此,将来,如果我删除 DAAB 并在我的内部使用另一个 API DataService 类,客户端代码无需更改。此外,我可以在我的 IDataService 接口中添加 DAAB 中不存在的任何方法....例如 BatchUpdate()...

如果我错了,请纠正我。

4

1 回答 1

0

看起来你让它变得比它应该的复杂。也许一次迈出一步会有所帮助。

DAL:我没有看到在 DAAB 上使用包装器的好处。IMO,DAAB 已经是 DAL 包装器。Wrapper over wrapper 会适得其反。应该只有一个 DAL。这就是 DAL 的全部意义所在。

ORM:对于映射器类,也许您应该考虑使用实体框架或 NHibernate 来实现 ORM。当模式发展时,编写自己的 ORM 是乏味且难以维护的。

于 2009-07-01T17:31:01.627 回答