繁体   English   中英

DAL设计问题

[英]DAL design question

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

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

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

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

回答几个问题:

我可以将 DbManagerBase class 和 RegistrationDAL、UserManagermentDAL 类中的所有方法都作为 static 吗?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM