6.       ASPECT

AOP(Aspect 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 Injection(SQL注入)攻击!

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

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(假定username为unique 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 throw,one catch,no re-throw

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

ii.              one throw,multi-catch,multi-re-throw

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

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

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

实战 .Net 数据访问层 - 19相关推荐

  1. 实战 .Net 数据访问层 - 23

      u     使用现成的框架 Ø        首选当然是.NET Framework即将正式推出的ObjectSpaces! Ø        如果希望Total Solution,Borland ...

  2. php数据访问层,对数据访问层第一种实现(Acc+SQL)的重构

    昨天的文章基于.NET平台的分层架构实战(七) 数据 访问 层的 第一 种 实现 :Access+SQL发布后,很多朋友对我的程序提出了意见和建议,在这里先谢谢你们!!!尤其是金色海洋(jyk),对我 ...

  3. Scott Mitchell 的ASP.NET 2.0数据教程之一: 创建一个数据访问层

    原文 | 下载本教程中的编码例子 | 下载本教程的英文PDF版 导言 作为web开发人员,我们的生活围绕着数据操作.我们建立数据库来存储数据,写编码来访问和修改数据,设计网页来采集和汇总数据.本文是研 ...

  4. 自动生成三层结构代码(3)--生成数据访问层Insert方法

    版权所有:基础软件.作者邮箱:sun.j.l.studio@gmail.com.本文首发于 http://www.cnblogs.com/FoundationSoft.文章转载请保持此版权信息并注明出 ...

  5. ASP.NET数据库访问系列教程01-概述篇 创建数据访问层(下)

    ASP.NET数据库访问系列教程 本教程深入探讨了基于ASP.NET 2.0技术的数据库访问方法和模式.这些介绍非常简明,并且提供了一步步的指导和大量的截屏. 该系列教程包括: 概述篇 基础报表 主/ ...

  6. 项目架构开发:数据访问层之Cache

    数据访问层简单介绍 数据访问层,提供整个项目的数据访问与持久化功能.在分层系统中所有有关数据访问.检索.持久化的任务,最终都将在这一层完成. 来看一个比较经典的数据访问层结构图 大概可以看出如下信息 ...

  7. ASP.NET数据库访问系列教程01-概述篇 创建数据访问层(中)

    ASP.NET数据库访问系列教程 本教程深入探讨了基于ASP.NET 2.0技术的数据库访问方法和模式.这些介绍非常简明,并且提供了一步步的指导和大量的截屏. 该系列教程包括: 概述篇 基础报表 主/ ...

  8. 反射工厂在数据访问层的应用

    在web.config的<appSettings>配置节中定义名webDAL键,它的值为所需访问的数据库对应的程序集名称,如你访问数据库为mssql,对应的项目文件为prjName.Sql ...

  9. 数据访问层DAL的再次重构_3(转载)

    原文链接 接着数据访问层DAL的再次重构_2_模块的自定义设置节我们继续实现,到这里,开始后台编码,经历了建立数据库.建表.存储过程.web.config的自定义配置节点后,我们来实现数据访问层的编码 ...

最新文章

  1. 深度学习-语义分割总结
  2. python-虎扑爬虫
  3. MapReduce天气案例
  4. MySQL limit
  5. 安卓系统开机过程中logo和动画
  6. MIT联手IBM发布超大数据集:100多万短视频,多维度标注
  7. 【廖雪峰官方网站/Java教程】多线程(1)
  8. Atitit 定时器timer 总结 目录 1. 定时器 循环定时器 和timeout超时定时器 1 2. Spring定时器 1 2.1. 大概流程 1 2.2. 核心源码springboot 1
  9. 终极算法---读书笔记
  10. matlab打开时总闪一下才打开_matlab打不开,只在任务栏闪一下就无反应了怎么办?...
  11. 计算机专业有必要数学竞赛吗,高中数学竞赛必要吗
  12. 【论文笔记】Proofs-of-delay and randomness beacons in Ethereum-2017IEEE SB Workshop
  13. 如何轻松记账,记录日常收支选对账本很重要
  14. SOJ 4583 动态规划之分组背包
  15. 华为路由器负载均衡_华为路由器双出口负载均衡+备份 (2)
  16. 快手2019秋季校园招聘算法笔试A卷编程题 - 题解
  17. k线顶分型 python_K线战法之『顶底分型』高手懂的
  18. Autodesk VRED Design2022安装教程
  19. EDIUS怎么制作字幕停留效果?
  20. Jbuilder2005开发小技巧

热门文章

  1. 大学生计算机基础大难,大学生计算机基础实训六样文
  2. house robbers
  3. mysql删除学生记录_mysql删除重复记录语句,删除除了 id 号不同,其他都相同的学生冗余信息...
  4. ingress 七层负载均衡器
  5. 进程监控工具 Procmon有Linux版本了
  6. python三角形判断_python三角形判定怎么做
  7. GPS涉及到的各种时间转换(年月日,年积日,儒略日,GPS周及周内日或周内秒,星期几)python
  8. 沐风:小程序推广高手速成秘笈
  9. 步进电机五根线怎么接_第一讲:老冯三分钟教会你步进电机接线
  10. 计算机专业梦想作文,我的理想是电脑工程师作文