如何让数据访问过程更透明_c#应用
2008-02-23 05:45:57来源:互联网 阅读 ()
在编写数据库操作方法时我们经常考虑方法内部处理的Connection, Transaction等,主要方便以后不同方法进行整合扩展。但很多时候写数据库操作方法都是封闭,在方法内部打开Connection或Transaction处理;这样即满足现有需求的需要,要省下了调用方法所带来的麻烦事(因为在调用方法里必须定义Connection等信息传进去)。虽然这样满足了现有的需求,但面对以后在功能扩展需要整合几个方法时问题就产生了,因为方法是封闭的当您需多个方法同时使用一个Connection或Transaction就必须修改原有方法;虽然能够对方法重载一个新版来适应新的需要,但是代码的修改和重构也不是一件轻松的工作。
简单地描述一下问题:
public void a()
{
........
}
public void b()
{
…….
}
以上两个方法单独使用并没有什么问题,因为他们都是单独的。当出现下面情况又是如何呢?
Public void c()
{
a();
b();
….
}
在执行这个方法时有可能要确保a和b里面的数据库访问必须使用同一个Connection,假如需要数据完全整性还要确保两个方法的数据操作都必须使用同一个Transaction。由于刚开始编写a和b方法没有考虑这些情况,这个时候我们能做的只有把a和b方法进行重构来满足原有和现在的需要。
假如我们不修改a和b就能满足c的需要那是件多么好的事情,这样研发人员就有更多的时间去处理业务相关的麻烦事情。有时想一下dotNET提供一个DataContext(数据库操作上下文对象)该多好啊,在编写数据库操作代码时不用关心使用什么的Connection和Transaction;通过当前的DataContext来确定。虽然自己有这样的想法去实现,但是dotNET能提供是件最好但是的事情。
Public void c()
{
using(DataContext context = new DataContext())
{
a();
b();
….
}
}
Public void D()
{
using(DataContext context = new DataContext())
{
c();
….
}
}
补充一下:
其实在我的想法中DataContext不一定要显式创建,能够通过配置的方式在中程式配置一个默认的DataContext。
以下代码的功能没有完全实现。
Table orders = new Table("Orders");
Table orderdetails = new Table("[Order Details]");
orderdetails.Delete(OrderDetails._OrderID == 10500);
orders.Delete(Orders._OrderID == 10500);
即使不用显式创建DataContext 上面代码也能够运行。
为了确保数据完整性能够这样做:
using(TransactionContext tran = new TransactionContext())
{
Table orders = new Table("Orders");
Table orderdetails = new Table("[Order Details]");
orderdetails.Delete(OrderDetails._OrderID == 10500);
orders.Delete(Orders._OrderID == 10500);
tran.Commit();
}
在写代码的过程就能够把这些东西抛开,需要时候定义相应的DataContext就能够了。
假如需要高度透明性,只有一个DataContext是远远不够的,必须提供相应数据操作的封装。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇: 存储过程中调用c#写的dll_c#应用
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash