当前位置: 网学 > 编程文档 > 其他类别 > 正文

系统架构师谈企业应用架构之数据访问层

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/12
务单元,我们必须将指定操作类

型,当然我们还可以更灵活,我们通过在事务单元中设置属性判定是否在事务中,如果不在事务中,我们执行数据持久化操作,如果在事务中,我们则添加到事务列表

中,因为我们在提交时总会循环执行事务列表中的事务单元。当然我这里只是一个简单的思路,抛砖引玉,希望大家有更好的想法,可以跟我交流,或者给我提出建

议,那样我就感激不尽了。下面我们来看看数据访问层中的并发的问题,我们如何去应对,有没有什么完美的方案呢?

前面我们举例子说过,有3中方式,我们这里举例说明:

通过字典存储值发生变化的列,完成更新变化列的操作。这样至少可以避免2人同时更新,造成最近更新的内容覆盖先前更新的内容,虽然可能更新的是不同的数

据列,我们这里只提供实例代码:

498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/47122121543.png" />

另外2种实现方式也差不多,一种是在数据库表中添加一列版本号,然后在数据更新时必须加上之前取出来的对象的版本号,然后一并同主键作为条件,完成更

新,这样至少可以保证数据的完整性。另外一直就是通过对象代理,我们将要更新的对象的字段的旧值,放在代理中,然后在生成更新语句时,我们将对象代理中的旧

值也添加到where查询条件中,这样我们通过限制条件的方式,来维护数据的完整性。我们来看看简单代码:

  1. public class EntityProxy  
  2. {  
  3. public string Name  
  4. {  
  5. get;  
  6. set;  
  7. }  
  8. public object Tag  
  9. {  
  10. get;  
  11. set;  
  12. }  
  13. public int ID  
  14. {  
  15. get;  
  16. set;  
  17. }  
  18. public string Unit  
  19. {  
  20. get;  
  21. set;  
  22.  }  

假设上面的几个数据列是我们要更新的数据库列,那么我们只需要在UPdate语句中,附加这四个数据库列字段条件就好了,这样如果发现更新结果返回的是0,那

么代表更新失败。通过上面的几种形式,我们来看,如果允许的话,我们还是推荐在数据库表中添加一个版本号的形式来处理更新,这是最高效的形式,可以通过时间

戳的形式来生成版本号。

七、本章总结

本章主要简单阐述了,数据访问层的基本功能,必要的四个职责,及数据库访问层的简单的设计思路与实现思路,当然我这里没有提供完整的实现,具体的实

现,我想我会在ORM系列中提供完整的代码,当然目前可能必须讲完架构后,回头我会拾起来那部分进行详细的讲解,好了我想本文的内容都比较浅显易懂,大家都能

够迅速的掌握,如果您有更好的思路或者设计方案,那么很希望您能提出来交流,这将是我莫大的荣幸。 

作者:CallHot-何戈洲

出处:http://www.cnblogs.com/hegezhou_hot/

关于作者:专注于微软平台项目架构、管理和企业解决方案。熟悉设计模式、极限编程、架构设计、敏捷开发和项目管理。现主要从事WinForm、ASP.NET、等方面的项目开发、架构、管理工作。如有问题或建议,请多多赐教!

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号