ASP.NET开发,从二层至三层,至面向对象 (3)
继续上一篇《ASP.NET开发,从二层至三层,至面向对象 (2)》http://www.cnblogs.com/insus/p/3825805.html 。我们学会了怎样创建对象,把BizBase类从页面级分离,解耦合度。亲的更亲,疏的更疏。
上面使用的是Access数据,将达不到扩展与升级的要求。程序在发展的同时,有可能会转向SQL数据库,或是有些模块外包。在这情形出现,我们需要定制设计规范接口。接手此软开发的团队,所在逻辑处层中,实作这个接口即可。
下面Insus.NET尝试写一个接口,在程序中应用SQL Server的团队,不管是在逻辑层中写SQL语句的,还是在逻辑层传入参数引用存储过程的,均可实现统一的接口。

上面标记2的返回DbdataReader函数,是为了它能让Access数据库(System.Data.OleDb.OleDbDataReader)与SQL数据库(System.Data.SqlClient.SqlDataReader)均能实作。由于这两者均是继承DbDataReader类。
这样的话,以前写的Access数据库的逻辑类BizBase,实作这个接口,得修改一下,才符合接口的标准:
下面,Insus.NET实现一个逻辑类,是方便用用户在程序的中习惯写SQL语句的对象:
接下来,Insus.NET再实现一个逻辑处理类,也是程序与数据库互通的,不过它是配合SQL Server数据库的存储过程来的。当然使用存储过程,它自然有参数出现。准备之前,先写一个类Insus.NET.Parameter:

现在就可以创建这个逻辑类了,它有实作接口IBiz:
上面有写两个public的property,将是用来给程序对象传入引用的哪一个存储过程,以及参数。如果所引用的存储过程没有参数,传入null即可。
private string _ProcedureName;
private List<Parameter> _Parameters; public string ProcedureName
{
get { return _ProcedureName; }
set { _ProcedureName = value; }
}
public List<Parameter> Parameters
{
get { return _Parameters; }
set { _Parameters = value; }
}
还有一个私有方法,它是用来创建参数的。如果size传入为-1的话,系统将使用默认数据类型长度。
private SqlParameter CreateParameter(string parameterName, SqlDbType dbType, Int32 size, object value)
{
SqlParameter sqlParameter;
if (size > )
sqlParameter = new SqlParameter(parameterName, dbType, size);
else
sqlParameter = new SqlParameter(parameterName, dbType); sqlParameter.Direction = ParameterDirection.Input;
sqlParameter.Value = value; return sqlParameter;
}
BizBaseSqlSp这个类别中,每个方法或是函数,均有几行代码冗余:
解决冗余,可以把它抽取出来,写一个私有的方法:
重构好之后的BizBaseSQLSp类:
如果你不想多数据库集成,你完全抽取其中一个逻辑处理类,作为你的类库。特别是最后一个。不必再问下面这个类库的原代码了:http://www.cnblogs.com/insus/archive/2013/05/23/3096045.html
当然,它肯定在asp.net MVC也能用得到。
本篇演示源程序(Access DB; .NET Framework 4.0;):
http://download.cnblogs.com/insus/ASPDOTNET/Asp_OOP3.rar
注:文章太长了,写成续集,请关注......
ASP.NET开发,从二层至三层,至面向对象 (3)的更多相关文章
- ASP.NET开发,从二层至三层,至面向对象 (5)
此是一系列博文,最后一篇了.也是面向初学者而作,望你们能有更好,更多对ASP.NET面向对编程了解与认识. 前一篇中<ASP.NET开发,从二层至三层,至面向对象 (4)>http://w ...
- ASP.NET开发,从二层至三层,至面向对象 (4)
继续上一篇<ASP.NET开发,从二层至三层,至面向对象 (3)>http://www.cnblogs.com/insus/p/3826706.html .我们更深层次学会了逻辑层对象,即 ...
- ASP.NET开发,从二层至三层,至面向对象 (2)
继续上一篇<ASP.NET开发,从二层至三层,至面向对象>http://www.cnblogs.com/insus/p/3822624.html .我们了解到怎样把自己的程序由二层变为三层 ...
- 【ASP.NET开发】.NET三层架构简单解析
对于三层架构来说,主要是使用设计模式的思想,对于项目的各个模块实现"高内聚,低耦合"的思想.这里就不做详细的介绍了,如果大家有兴趣,可以阅读软件工程和设计模式相关文章. 对于三层架 ...
- ASP.NET开发,简化与封装
ASP.NET开发,简化与封装 微软的ASP.NET的开发,就是面向对象的编程,当然前端也能体验至面向对象的话,使用Web控件也必须的. 任一控件,我们均可以在后端.aspx.cs或.aspx.vb程 ...
- 专门为ADO二层升三层的咏南中间件(特种用途)
专门为ADO二层升三层的咏南中间件(特种用途) 演示下载:链接: https://pan.baidu.com/s/1bulGBIZ6A1nkeErxIrGsGA 密码: 22dk 解压后运行ynmai ...
- 为方便二层升三层新增的远程方法QuerySql6()
为了方便原来D6,D7开发的二层老程序升级为三层,新增了远程方法QuerySql6().充分地兼容原来二层SQL的写法. 1)公共方法ParamsToStr() function ParamsToSt ...
- DELPHI7 ADO二层升三层新增LINUX服务器方案
DELPHI7 ADO二层升三层新增LINUX服务器方案 引子:笔者曾经无数次在用户的LINUX服务器上创建一个WINDOWS虚拟机,用于运行自己DELPHI开发中间件. 现在再不需要如此麻烦了. 咏 ...
- 下一代Asp.net开发规范OWIN(1)—— OWIN产生的背景以及简单介绍
随着VS2013的发布,微软在Asp.Net中引入了很多新的特性,比如使用新的权限验证模块Identity, 使用Async来提高Web服务器的吞吐量和效率等.其中一个不得不提的是OWIN和Katan ...
随机推荐
- OmniThreadLibrary学习笔记
http://blog.sina.com.cn/s/articlelist_1157240623_6_1.html 非常好的控件,仔细看
- Kali Linux渗透测试实战 1.3 渗透测试的一般化流程
1.3 渗透测试的一般化流程 凡事预则立,不预则废,做任何事情都要有一个预先的计划.渗透测试作为测试学科的一个分支,早已形成了完整的方法论.在正式开始本书的实践教学章节之前,我也想谈一谈使用Kali ...
- JS学习笔记1_基础与常识
1.六种数据类型 5种基础的:Undefined,Null,Boolean,Number,String(其中Undefined派生自Null) 1种复杂的:Object(本质是一组无序键值对) 2.字 ...
- netcore的Session使用小记
之前说过,core需要什么功能就添加并使用什么中间件 照例,在Startup.cs的ConfigureServices方法中添加services.AddSession();再在Configure方法中 ...
- MVC 5使用ViewData(模型)显示数据
看过此篇<MVC 5使用ViewData(对象)显示数据>http://www.cnblogs.com/insus/p/3377178.html 都明白在控制器使用ViewData(obj ...
- ionic 2.x 3.x input触发调用键盘搜索及事件
html (1.input type='search' 2.将input套在一个带action的form中 ) <form action=""> <ion- ...
- 【转】 js数组 Array 交集 并集 差集 去重
原文:http://blog.csdn.net/ma_jiang/article/details/52672762 最劲项目需要用到js数组去重和交集的一些运算,我的数组元素个数可能到达1000以上, ...
- Spring IOC 容器源码分析 - 创建单例 bean 的过程
1. 简介 在上一篇文章中,我比较详细的分析了获取 bean 的方法,也就是getBean(String)的实现逻辑.对于已实例化好的单例 bean,getBean(String) 方法并不会再一次去 ...
- new关键字创建对象带不带{}的区别
gson通过TypeToken实现了对泛型数据的支持,使用方式如下: gson.fromJson([待转化的字符串], new TypeToken<[目标类]<目标类中的泛型>> ...
- postgresql-日志表
pg_log,数据库日志表postgresqllog CREATE TABLE postgres_log ( log_time timestamp(3) with time zone, 日志生成时间 ...