3

我需要设计一个数据访问层 DAL .Net 企业库版本 3.5 数据访问应用程序块 (DAAB) 在我的应用程序中,我有各种逻辑模块,如注册、计费、订单管理、用户管理等我使用 C# 业务实体来将模块对象映射到数据库表,然后将 List 集合返回给客户端。

我想以这样一种方式设计我的 DAL,如果明天我们决定使用其他一些数据访问框架,我们应该对代码进行最少的更改。鉴于此,我如何设计我的班级结构?我以为我会有一个 DbManagerBase 类,它将是现有 .net DAAB 的包装器。此类 DbManagerBase 将实现一个名为 IDbManagerBase 的接口,该接口将具有 ExecuteReader、ExecuteNonQuery 等公共方法。

客户端类,即。RegistrationDAL,UserManagermentDAL 在其每个方法中都会包含以下代码: IDbManagerBase obj= new DbManagerBase() obj.ExecuteReader(myStoredProcName) 。. . 这是一个好的 OOPS 设计吗?请问我有什么更好的方法吗?或者我需要在这里使用继承吗?我可以将 DbManagerBase 类和 RegistrationDAL、UserManagermentDAL 类中的所有方法都设为静态吗?我想,如果我将方法设为静态,那么上面的接口代码将没有任何意义……对吗???

4

2 回答 2

4

要真正抽象 DAL,我会使用存储库模式

于 2009-02-25T19:53:02.957 回答
2

回答几个问题:

我可以将 DbManagerBase 类和 RegistrationDAL、UserManagermentDAL 类中的所有方法都设为静态吗?

我可能会采用非静态方法,因为它可以灵活地更好地控制 DAL 的实例化(例如,您可以从工厂创建它们的实例),它还将允许您有两个正在通话的 DAL以更清洁的方式连接到不同的数据库。此外,您不需要在每个对象中创建 DbManagerBase 的实例,因为它将是实例成员。

关于具有 ExecuteReader、ExecuteNonQuery 和 obj.ExecuteReader(myStoredProcName) 的 IDbManagerBase

我会小心在太多地方烘焙有关数据库特定概念的知识。请记住,某些数据库不支持存储过程。

另一点是,在我开始实施某种 DAL 之前,我一定会通读其他开源 DAL 中的一些代码,例如 NHibernate 或 Subsonic。他们完全有可能解决您的业务问题并显着减少您的开发时间。

如果你正在寻找一个分层 DAL 架构的小例子,我在 github 上有我的小项目(它非常基础,但展示了如何构建接口来支持许多深奥的数据库)

于 2009-02-25T21:58:14.403 回答