实战 .Net 数据访问层 - 19
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相关推荐
- 实战 .Net 数据访问层 - 23
u 使用现成的框架 Ø 首选当然是.NET Framework即将正式推出的ObjectSpaces! Ø 如果希望Total Solution,Borland ...
- php数据访问层,对数据访问层第一种实现(Acc+SQL)的重构
昨天的文章基于.NET平台的分层架构实战(七) 数据 访问 层的 第一 种 实现 :Access+SQL发布后,很多朋友对我的程序提出了意见和建议,在这里先谢谢你们!!!尤其是金色海洋(jyk),对我 ...
- Scott Mitchell 的ASP.NET 2.0数据教程之一: 创建一个数据访问层
原文 | 下载本教程中的编码例子 | 下载本教程的英文PDF版 导言 作为web开发人员,我们的生活围绕着数据操作.我们建立数据库来存储数据,写编码来访问和修改数据,设计网页来采集和汇总数据.本文是研 ...
- 自动生成三层结构代码(3)--生成数据访问层Insert方法
版权所有:基础软件.作者邮箱:sun.j.l.studio@gmail.com.本文首发于 http://www.cnblogs.com/FoundationSoft.文章转载请保持此版权信息并注明出 ...
- ASP.NET数据库访问系列教程01-概述篇 创建数据访问层(下)
ASP.NET数据库访问系列教程 本教程深入探讨了基于ASP.NET 2.0技术的数据库访问方法和模式.这些介绍非常简明,并且提供了一步步的指导和大量的截屏. 该系列教程包括: 概述篇 基础报表 主/ ...
- 项目架构开发:数据访问层之Cache
数据访问层简单介绍 数据访问层,提供整个项目的数据访问与持久化功能.在分层系统中所有有关数据访问.检索.持久化的任务,最终都将在这一层完成. 来看一个比较经典的数据访问层结构图 大概可以看出如下信息 ...
- ASP.NET数据库访问系列教程01-概述篇 创建数据访问层(中)
ASP.NET数据库访问系列教程 本教程深入探讨了基于ASP.NET 2.0技术的数据库访问方法和模式.这些介绍非常简明,并且提供了一步步的指导和大量的截屏. 该系列教程包括: 概述篇 基础报表 主/ ...
- 反射工厂在数据访问层的应用
在web.config的<appSettings>配置节中定义名webDAL键,它的值为所需访问的数据库对应的程序集名称,如你访问数据库为mssql,对应的项目文件为prjName.Sql ...
- 数据访问层DAL的再次重构_3(转载)
原文链接 接着数据访问层DAL的再次重构_2_模块的自定义设置节我们继续实现,到这里,开始后台编码,经历了建立数据库.建表.存储过程.web.config的自定义配置节点后,我们来实现数据访问层的编码 ...
最新文章
- 深度学习-语义分割总结
- python-虎扑爬虫
- MapReduce天气案例
- MySQL limit
- 安卓系统开机过程中logo和动画
- MIT联手IBM发布超大数据集:100多万短视频,多维度标注
- 【廖雪峰官方网站/Java教程】多线程(1)
- Atitit 定时器timer 总结 目录 1. 定时器 循环定时器 和timeout超时定时器	1 2. Spring定时器	1 2.1. 大概流程	1 2.2. 核心源码springboot	1
- 终极算法---读书笔记
- matlab打开时总闪一下才打开_matlab打不开,只在任务栏闪一下就无反应了怎么办?...
- 计算机专业有必要数学竞赛吗,高中数学竞赛必要吗
- 【论文笔记】Proofs-of-delay and randomness beacons in Ethereum-2017IEEE SB Workshop
- 如何轻松记账,记录日常收支选对账本很重要
- SOJ 4583 动态规划之分组背包
- 华为路由器负载均衡_华为路由器双出口负载均衡+备份 (2)
- 快手2019秋季校园招聘算法笔试A卷编程题 - 题解
- k线顶分型 python_K线战法之『顶底分型』高手懂的
- Autodesk VRED Design2022安装教程
- EDIUS怎么制作字幕停留效果?
- Jbuilder2005开发小技巧
热门文章
- 大学生计算机基础大难,大学生计算机基础实训六样文
- house robbers
- mysql删除学生记录_mysql删除重复记录语句,删除除了 id 号不同,其他都相同的学生冗余信息...
- ingress 七层负载均衡器
- 进程监控工具 Procmon有Linux版本了
- python三角形判断_python三角形判定怎么做
- GPS涉及到的各种时间转换(年月日,年积日,儒略日,GPS周及周内日或周内秒,星期几)python
- 沐风:小程序推广高手速成秘笈
- 步进电机五根线怎么接_第一讲:老冯三分钟教会你步进电机接线
- 计算机专业梦想作文,我的理想是电脑工程师作文