Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DAL设计问题_C#_Data Access Layer - Fatal编程技术网

C# DAL设计问题

C# DAL设计问题,c#,data-access-layer,C#,Data Access Layer,我需要设计一个数据访问层DAL.Net企业库版本3.5数据访问应用程序块(DAAB) 在我的应用程序中,我有各种逻辑模块,如注册、计费、订单管理、用户管理等 Am使用C#业务实体将模块对象映射到数据库表,然后将列表集合返回给客户端 我希望以这样的方式设计我的DAL,如果明天我们决定使用其他数据访问框架,我们应该有最小的代码更改。 鉴于此,我如何设计我的班级结构? 我想我会有一个DbManagerBase类,它是现有.NETDAAB的包装器 此类DbManagerBase将实现一个名为IDbMan

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

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

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

要真正抽象DAL,我会使用

回答以下几个问题:

我能把所有的方法都记下来吗 DbManagerBase类和 RegistrationDAL,UserManagermentDAL 类是静态的吗

我可能会使用非静态方法,因为它提供了更好地控制DAL实例化的灵活性(例如,您可以从工厂创建它们的实例),还允许您有两个DAL,它们以更干净的方式与不同的DBs进行通信。此外,您不需要在每个对象中创建DbManagerBase的实例,因为它将是实例成员

关于IDbManagerBase具有ExecuteReader、ExecuteOnQuery和obj.ExecuteReader(myStoredProcName)的问题

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

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

如果您正在寻找分层DAL体系结构的一个小示例,那么有一个我的示例(它非常基本,但展示了如何构建接口以支持许多深奥的数据库)