请教一个设计方式

ahking 2017-10-24 08:57:23
做一个程序,想实现数据库类型无关,即用sql server ,access ,oracle都可以

各种数据库的获取、更新操作分别用静态方法实现了,返回datatable或单个值,假设这是第一层;

调用不同库的相同逻辑的静态方法用相同的方法名,假设这是第三层;

第二层该如何做把第一层和第三层挂接起来呢?

注:不使用实体框架
...全文
313 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahking 2017-10-28
  • 打赏
  • 举报
回复
西漠以西 2017-10-25
  • 打赏
  • 举报
回复
.net框架中ado.net部分已经帮你解决了问题,根本不需要你自己去想了。 看看框架文档里关于System.Data.Common命名空间中的那些类和接口,全是和具体数据库无关的。
大鱼> 2017-10-25
  • 打赏
  • 举报
回复
采用设计模式里面的工厂模式就可以了
  • 打赏
  • 举报
回复
DbCo 类型 --> DbConnection 类型
  • 打赏
  • 举报
回复
当你纠结“各种数据库的获取、更新操作分别用静态方法实现了”的话的时候,你可能就相当于只见砖头而不见建筑,只见树木而不见森林,只见 SqlConnection 类型而不见 DbCo 类型,也肯定只知道有 System.Data.SqlClient 而不知道有 System.Data.Common 命名空间,知道一大堆“工厂模式”的名词而不会设计。这时候其实你应该先把所谓的“静态方法”扔掉,先分析设计一套对象(类)来继承各种属性、事件、方法,并且子类能够重写父类的过程实现。先把这套图形画出来。 不要写代码,先把内心、纸上的东西学会。
  • 打赏
  • 举报
回复
你可以看看 ado.net 是如何将 SQL Server、Oracle、MySQL、Sqlite 等等等等成百上千的关系数据库抽象统一到同一套非常精简的 ado.net 代码中的。比如说我写
using(var conn = NewConnection())
{
    conn.Open();
    var cmd = conn.CreateCommand();
    cmd.Text= " ........";    //这里可以从不同的资源文件查询不同数据库系统适配的对应sql语句
    cmd.ExecuteNoneQuery();
}
人家就能适配上百种关系数据库。 学过数据库编程的人,怎么能连 ado.net 的抽象各种各样关系数据库的设计方式都不理解呢?还重复问这类问题?
正怒月神 2017-10-25
  • 打赏
  • 举报
回复
可以使用 工厂模式或者 策略模式。 我看下来,简单划分应该如下 database 数据 dal 数据访问 bll 业务逻辑 web 页面展示 那么很明显 你的问题值关乎 database和 dal 你可以让dal层继承一个 baseDal。这个baseDal里实例化具体的数据库上下文 dbcontext 至于怎么实例化,那就可以通过工厂模式或者策略模式,来创建dbcontext了。
qq_40651705 2017-10-25
  • 打赏
  • 举报
回复
可以用IOC,这样以后要添加新的数据库也方便。
ahking 2017-10-25
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
可以使用 工厂模式或者 策略模式。 我看下来,简单划分应该如下 database 数据 dal 数据访问 bll 业务逻辑 web 页面展示 那么很明显 你的问题值关乎 database和 dal 你可以让dal层继承一个 baseDal。这个baseDal里实例化具体的数据库上下文 dbcontext 至于怎么实例化,那就可以通过工厂模式或者策略模式,来创建dbcontext了。
不能用静态方法了吧
圣殿骑士18 2017-10-25
  • 打赏
  • 举报
回复
这就是一个简单的接口和工厂的概念嘛
ahking 2017-10-25
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
当你纠结“各种数据库的获取、更新操作分别用静态方法实现了”的话的时候,你可能就相当于只见砖头而不见建筑,只见树木而不见森林,只见 SqlConnection 类型而不见 DbCo 类型,也肯定只知道有 System.Data.SqlClient 而不知道有 System.Data.Common 命名空间,知道一大堆“工厂模式”的名词而不会设计。这时候其实你应该先把所谓的“静态方法”扔掉,先分析设计一套对象(类)来继承各种属性、事件、方法,并且子类能够重写父类的过程实现。先把这套图形画出来。 不要写代码,先把内心、纸上的东西学会。
受教了,当时好像记得有文章介绍,SqlClient 、OracleClient性能好、功能强,就用了他们专为.net 提供的驱动程序
圣殿骑士18 2017-10-25
  • 打赏
  • 举报
回复
原来ado.net还能这么用,长见识。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧