PetShop 4.0 数据访问层之我所见
个人感觉数据访问层,设计上应该可以更精简。
现有的框架是一个DAL,对应一个Helper(我们可以理解其实就是真正的数据引擎)。这种方式实现上确实很简单,但是有重复的地方。对于每种DAL,不同的只是Helper,其它实现基本相同。
一个可行的重构,实现一个真正的Helper类,把不同的数据引擎,封装为一个DALEngine, 一些简单的代码实现,可以参见如下:
public interface IDALEngine
{
int ExecuteNonQuery(CommandType cmdType, String cmdText, IList<IParameter> parameters);
object ExecuteNonScalar(CommandType cmdType, String cmdText, IList<IParameter> parameters);
IDataReader ExecuteReader(CommandType cmdType, String cmdText, IList<IParameter> parameters);
}
public abstract class DALHelper
{
public static int ExecuteNonQuery(IDALEngine engine, CommandType cmdType, String cmdText, IList<IParameter> parameters)
{
return engine.ExecuteNonQuery(cmdType, cmdText, parameters);
}
public static object ExecuteNonScalar(IDALEngine engine, CommandType cmdType, String cmdText, IList<IParameter> parameters)
{
return engine.ExecuteNonScalar(cmdType, cmdText, parameters);
}
public static IDataReader ExecuteReader(IDALEngine engine, CommandType cmdType, String cmdText, IList<IParameter> parameters)
{
return engine.ExecuteReader(cmdType, cmdText, parameters);
}
}
public class SqlDALEngine : IDALEngine
{
private SqlConnection conn;
public SqlDALEngine(String connString)
{
conn = new SqlConnection(connString);
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
}
int ExecuteNonQuery(CommandType cmdType, String cmdText, IList<IParameter> parameters)
{
if (conn.State != ConnectionState.Open)
{
//throw exception: connection is closed!
}
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = cmdType;
cmd.CommandText = cmdText;
if (parameters != NULL)
{
foreach (IParameter param in parameters)
{
cmd.Parameters.Add(param); //也许需要进行一些转换,这里只是一个伪代码
}
}
int result = cmd.ExecuteNonQuery();
return result;
}
object ExecuteNonScalar(CommandType cmdType, String cmdText, IList<IParameter> parameters)
{
//参考实现如ExecuteNonQuery
}
IDataReader ExecuteReader(CommandType cmdType, String cmdText, IList<IParameter> parameters)
{
//参考实现如ExecuteNonQuery
}
}
看起来这只是一个简单的转换,但在大型系统,表格极多的情况下,绝对是一大改善。
另外,原有的数据访问层框架,如果在数据没有准备好的情况下,不便于测试,通过这种改善,我们可以把数据访问及数据访问引擎给进行隔离,各自发展
欢迎大家参与讨论,谢绝人身攻击!
转载于:https://www.cnblogs.com/richardy2012/archive/2012/11/15/2771741.html
PetShop 4.0 数据访问层之我所见相关推荐
- petshop4.0 详解之三(PetShop数据访问层之消息处理) [转]
三.PetShop数据访问层之消息处理 在进行系统设计时,除了对安全.事务等问题给与足够的重视外,性能也是一个不可避免的问题所在,尤其是一个B/S结构的软件系统,必须充分地考虑访问量.数据流量.服务器 ...
- Microsoft PetShop 3.0 设计与实现 分析报告―――数据访问层
Microsoft PetShop 3.0 设计与实现--数据访问层 最近对多层设计实现和.Net产生了兴趣,从而研究了一下比较著名的多层范例程序――PetShop,现在的版本是3.0,和以前的版本从 ...
- petshop4.0 详解之二(数据访问层之数据库访问设计)
在系列一中,我从整体上分析了PetShop的架构设计,并提及了分层的概念.从本部分开始,我将依次对各层进行代码级的分析,以求获得更加细致而深入的理解.在PetShop 4.0中,由于引入了ASP.Ne ...
- [wayfarer]PetShop数据访问层之消息处理
原文地址: http://www.cnblogs.com/wayfarer/archive/2006/09/06/496207.html <解剖PetShop>系列之三 三.PetShop ...
- [wayfarer]PetShop数据访问层之数据库访问设计
原文地址: http://www.cnblogs.com/wayfarer/archive/2006/04/21/381315.html <解剖PetShop>系列之二 二.PetShop ...
- Scott Mitchell 的ASP.NET 2.0数据教程之一: 创建一个数据访问层
原文 | 下载本教程中的编码例子 | 下载本教程的英文PDF版 导言 作为web开发人员,我们的生活围绕着数据操作.我们建立数据库来存储数据,写编码来访问和修改数据,设计网页来采集和汇总数据.本文是研 ...
- NHibernate3.2+Asp.net MVC3+Extjs 4.0.2项目实践(二): NHibernate数据访问层实现
关于NHibernate的ORM映射可以通过Hbm映射文件来完成,代码生成工具使得这一步骤变得简化:而NHibernate3.2版本集成Mapping-By-Code(代码映射),不同于其他映射方式, ...
- PP团队圣经巨著《Application Architecture Guide2.0》14章-数据访问层
第十四章 数据访问层指导 概览 这一章主要描述设计数据访问层时要注意的主要原则.它们覆盖了设计数据访问层遇到的通常问题及错误.下面的图表展示了数据层怎样嵌入一个通用的应用架构. (cnblog我的图片 ...
- Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 3 ----数据访问层
在上一篇中,我们已经搭建起了整个解决方案的项目,并且建好了数据库,完成了实体类和Nhibernate映射文件.在本文中,将定义数据访问接口,并利用Nhibernate实现接口,利用Spring.net ...
最新文章
- Node Opencv Addon
- 高校数字化建设到底该如何推进?这篇方案值得一看
- 安川伺服总线通讯方式_MⅢ总线特点 安川伺服选型与应用案例
- 【HDU - 2030 】汉字统计 (C语言汉字编码,长知识)
- python3兼容python2 print_python 字符串 r raw Python2 和 Python3 的区别及兼容技巧
- sql语句优化之一:尽量使用索引避免全表扫描
- Linux学习笔记003----linux yum命令详解
- 程序员很少加班?得全栈开发者得天下?撕开标签的技术圈真实模样
- [转]asp 没有权限: 'CreateObject'的解决方法
- 【原】机器学习几个基本的问题
- 管家婆系统怎么创建提醒服务器,管家婆辉煌Ⅱ++10.1 -管家婆软件官方网站
- PX PT 磅 EM 以及PS中字间距VA单位的解释
- RabbitMQ使用手册中文
- html5 3d背景墙,3D背景墙的价格怎样?3D背景墙的介绍?
- 收藏夹导出至html,分享win7电脑中三种导出浏览器收藏夹地址方法
- 阿里高层大调整:“接班人”蒋凡被调离核心业务淘宝天猫!
- ARCGIS地图导出问题
- 模糊系统与神经网络的区别,什么是模糊神经网络
- Ego的JavaSE笔记
- python画老虎_老虎证券量化API Python SDK
热门文章
- 伯克利AI研究院解析「反向课程学习」,改善「强化学习智能体」并应用于机器人技术
- Facebook 重金挖不到,ASP.NET 之父,微软大神“红衣教主”传奇
- 新外贸110%加速度,阿里巴巴国际站力推百亿投资计划
- 美团、饿了么,你凭什么让我多等几分钟?
- 现代 JavaScript 函数库 usuallyjs 的安装和使用
- 胡玮炜卸任摩拜CEO,或将成为美团大裁员的开端
- Linux学习笔记(十二)usermod、passwd、mkpasswd
- 这可能是最好的性能优化教程(三)
- Python高级特性——切片(Slice)
- Android SharedPreferences保存和读取对象