PetShop是如何兼容数据库的-.NET教程,数据库应用

本文介绍了如何通过实现多态性和配置文件的方式,在不修改或少修改代码的前提下完成数据库的移植和兼容工作。以PetShop项目为例,展示了如何根据不同需求轻松切换SQL Server和Oracle等不同数据库。
数据库的移植通常会带来高额的代价。这一点我深有体会。代价的大小就要看程序的架构写的怎么样了. 去年把一个项目从mysql移至到oracle, 整个程序里里外外都做了修修补补,大概花了两个月。

如果做到少修改,甚至不修改代码的前提下,对数据库的兼容无疑是一件非常好的事情,

petshop很好的做到了这一点

要兼容多种数据库,首先要实现多态。sqlserverdal和oracledal都实现了idal里所有接口的方法,实现了多态性。

factorydal用来创建dal对象,

public static petshop.idal.iaccount create()

{

/// look up the dal implementation we should be using

string path = system.configuration.configurationsettings.appsettings["webdal"];

string classname = path + ".account";

// using the evidence given in the config file load the appropriate assembly and class

return (petshop.idal.iaccount) assembly.load(path).createinstance(classname);

}

如上:创建account, 首先获取web.config 中的webdal的值。

<add key="webdal" value="petshop.sqlserverdal" />

web.config里”webdal”的值是petshop.sqlserverdal,该值决定了所要创建的dal的路径。

然后再用assembly.createinstance()创建dal实例.



若要使用oracle数据库, 只要把

<add key="webdal" value="petshop.sqlserverdal" />和

<add key="ordersdal" value="petshop.sqlserverdal" />

中的petshop.sqlserverdal改为petshop.oracledal就可以了。



而在bll中,它不需要知道你使用那个数据库。只是通过如下语句得到对象。

// get an instance of the account dal using the dalfactory

iaccount dal = petshop.dalfactory.account.create();

无论使用什么数据库,bll模块都不需要修改。





扩展性: 若要兼容mysql数据库改怎么办?

写一个mysqldal模块,实现idal里所有接口的方法。 再修改web.config中的值即可。



petshop提供了良好的可扩展性, 封闭了业务层的修改。很好的满足了ocp(开放-封闭原则).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值