实战 .Net 数据访问层 - 19

原创 2004年05月09日 10:50:00

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

6.       ASPECT

AOPAspect Oriented Programming)可能是最近几年被挖掘出

来的最具震撼力的技术之一,作者并不打算在此花什么篇幅介绍它(网上资料已多如牛毛),只是希望借用其ASPECT概念来说明几个设计Data Access Layer时必须考虑的问题(也是在进行系统架构设计前不得不考虑的几个重要因素!):

(1)   Security

把它排在ASPECT首位相信大家没什么疑义吧!

 

虽然,Business Logic已为我们搞定了太多的Security Issues,但那个长久挥之不去的“ConnectionString阴影”还是会成为不少开发人员心中永远的“不爽”!

 

有位同事告诉我,微软曾有一个号称8万人难以攻破的ASP.NET应用程序,它的ConnectionString居然就是存在了Registry中(别忘了禁用Remote Registry服务)!这样的双重保护(另一重是对ConnectionString进行加密处理)是多么简单却实用啊!

在很多时候,As Simple As Possible才是我们应该真正追求的目标。

 

另一个需要注意的问题就是如何应对SQL InjectionSQL注入)攻击!

一个经典的例子如下所示:

string strSql = "select * from user where" +

" username = '" + strUserName +

"' and password = '" + strPassword;

 

在这里,采用Dynamic SQL本身并无调用上的逻辑问题,但却给了Cracker以可乘之机:如果系统没有针对strPassword做过任何数据校验,当用户试着输入“abc”作为username,“123’ or 1 = 1”作为password时,那就不得不遗憾的告诉您:该系统已被成功攻破,请迅速发布新的补丁程序!

虽然这个例子很简单,但已提醒我们:小小的SQL语句也会成为系统漏洞的“重要来源”!

 

在这种情况下,避免产生危机的方法也很简单:使用Stored Procedure或者Parameter Collection(你不会告诉我准备把这个责任推给毫无SQL经验的Business Logic人员吧J)。如果系统架构时没有准备采用Stored Procedure或者开发人员很不习惯使用Parameter Collection(坦率地讲,我也不喜欢这个东东),那也有个稍微麻烦点的Solution(当然不推荐采用):

                                                                                 i.              仅使用username拼装Dynamic SQL

                                                                               ii.              判断返回纪录数是否为1(假定usernameunique column);

                                                                              iii.              如果记录数为1,取出password数据;

                                                                             iv.              判断用户输入之password是否与查询返回之password匹配。

 

限于篇幅,这里只讨论了两个比较常见的问题,当然是远远不能覆盖Security的全部精髓,只是为了表明一个观点:Security实在是非常非常重要,切勿等闲视之!

 

(2)    Transaction

这是个避无可避的东东,要发现它的问题有一定难度,且不易于测试!作者不准备就此展开,大家只有通过实战积累经验了。

另外,到底是用System.EnterpriseServices还是Connection.BeginTransaction + try-catch,依然会使很多.NET开发人员产生困惑,作为系统架构设计的一部分,这也是个必须充分考虑的问题!

 

(3)    Logging

日志不是个要不要的问题,而是怎么做的问题。

Log4Net已经很不错了,不会还想亲自动手做一个吧!

 

(4)    Exception

这是个“无底洞”,看你怎么设计了。

就作者经历的项目,主要采用这么两种方式:

                                                                                 i.              one throwone catchno re-throw

这个最简单了,不需要太复杂的Exception Inheritance Hierarchy,处理起来也比较轻松;

                                                                               ii.              one throwmulti-catchmulti-re-throw

复杂应用可能采用这种模式更多些,需要一大堆的Exception Classes和令人望眼欲穿的try-catch,但可能在扩展性和容错处理方面会表现得更为出色(可苦了咱们开发人员L)!

 

暂时就想到这些,如有什么遗漏,欢迎大家补充。

 

下一段:http://www.csdn.net/develop/Read_Article.asp?id=27564

.net中的数据访问层的封装

当年.net项目中自己封装的数据访问层,个人感觉使用非常方便
  • kevin_xf
  • kevin_xf
  • 2016年12月05日 15:53
  • 811

Asp.net mvc 数据访问层

理解了一些概念,本节开始尝试创建属于自己的数据访问层,说道数据访问层那必须有数据库咯(数据集合也算,此处以数据库为例),没有数据库就没有数据访问层。 1、先创建属于自己的数据库       打开已...
  • u013108485
  • u013108485
  • 2016年04月14日 16:19
  • 4932

实战 .Net 数据访问层 - 4

 代码3:我的Data Entity – 1,应用程序中的Data Entity// MyCustomer:包含基本字段的Customer,支持数据列表,从MyDef继承[Serializable()...
  • zhangxuefeng
  • zhangxuefeng
  • 2004年05月07日 22:03
  • 769

实战 .Net 数据访问层 - 23

 u     使用现成的框架Ø        首选当然是.NET Framework即将正式推出的ObjectSpaces!Ø        如果希望Total Solution,Borland EC...
  • zhangxuefeng
  • zhangxuefeng
  • 2004年05月09日 10:50
  • 1974

实战 .Net 数据访问层 - 6

    再回到最初的代码1,作者通过DAF的不同调用总共得到了5种不同的Data Entity对象:DataTable,DataSet,MyCustomer,Ilist,DbDataReader,奇怪...
  • zhangxuefeng
  • zhangxuefeng
  • 2004年05月07日 22:03
  • 818

实战 .Net 数据访问层 - 14

代码12:使用Data Access Logic进行Remoting调用 – 2,Remoting访问class CustomerDal_ORM : MyDal{    // 请注意:这个delega...
  • zhangxuefeng
  • zhangxuefeng
  • 2004年05月09日 10:49
  • 1874

实战 .Net 数据访问层 - 10

        以下是DAF的结构示意图:                                          是不是看上去还比较简单?根据以往的经验判断,在这种继承模式下,主要的开发工...
  • zhangxuefeng
  • zhangxuefeng
  • 2004年05月08日 11:29
  • 1582

实战 .Net 数据访问层 - 21

 (2)    EntityConvert这个东东是模仿System.Convert的产物,刚开始没觉得咋样,用起来还真有点舍不得呢(本文开头的代码1中曾经使用过这个Utility)!不信,且看如下代...
  • zhangxuefeng
  • zhangxuefeng
  • 2004年05月09日 10:49
  • 1721

实战 .Net 数据访问层 - 16

 5.       Cache Management首先说明一点,之所以将Cache Management单列出来,就是为了要说明数据缓存的重要性!在很多时候,这比撰写Data Access Logi...
  • zhangxuefeng
  • zhangxuefeng
  • 2004年05月09日 10:49
  • 2030

实战.NET数据访问层

http://blog.csdn.net/zhangxuefeng/category/12675.aspx 
  • chenjinghua
  • chenjinghua
  • 2006年06月29日 19:05
  • 559
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实战 .Net 数据访问层 - 19
举报原因:
原因补充:

(最多只允许输入30个字)