继续上一篇《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)的更多相关文章

  1. ASP.NET开发,从二层至三层,至面向对象 (5)

    此是一系列博文,最后一篇了.也是面向初学者而作,望你们能有更好,更多对ASP.NET面向对编程了解与认识. 前一篇中<ASP.NET开发,从二层至三层,至面向对象 (4)>http://w ...

  2. ASP.NET开发,从二层至三层,至面向对象 (4)

    继续上一篇<ASP.NET开发,从二层至三层,至面向对象 (3)>http://www.cnblogs.com/insus/p/3826706.html .我们更深层次学会了逻辑层对象,即 ...

  3. ASP.NET开发,从二层至三层,至面向对象 (2)

    继续上一篇<ASP.NET开发,从二层至三层,至面向对象>http://www.cnblogs.com/insus/p/3822624.html .我们了解到怎样把自己的程序由二层变为三层 ...

  4. 【ASP.NET开发】.NET三层架构简单解析

    对于三层架构来说,主要是使用设计模式的思想,对于项目的各个模块实现"高内聚,低耦合"的思想.这里就不做详细的介绍了,如果大家有兴趣,可以阅读软件工程和设计模式相关文章. 对于三层架 ...

  5. ASP.NET开发,简化与封装

    ASP.NET开发,简化与封装 微软的ASP.NET的开发,就是面向对象的编程,当然前端也能体验至面向对象的话,使用Web控件也必须的. 任一控件,我们均可以在后端.aspx.cs或.aspx.vb程 ...

  6. 专门为ADO二层升三层的咏南中间件(特种用途)

    专门为ADO二层升三层的咏南中间件(特种用途) 演示下载:链接: https://pan.baidu.com/s/1bulGBIZ6A1nkeErxIrGsGA 密码: 22dk 解压后运行ynmai ...

  7. 为方便二层升三层新增的远程方法QuerySql6()

    为了方便原来D6,D7开发的二层老程序升级为三层,新增了远程方法QuerySql6().充分地兼容原来二层SQL的写法. 1)公共方法ParamsToStr() function ParamsToSt ...

  8. DELPHI7 ADO二层升三层新增LINUX服务器方案

    DELPHI7 ADO二层升三层新增LINUX服务器方案 引子:笔者曾经无数次在用户的LINUX服务器上创建一个WINDOWS虚拟机,用于运行自己DELPHI开发中间件. 现在再不需要如此麻烦了. 咏 ...

  9. 下一代Asp.net开发规范OWIN(1)—— OWIN产生的背景以及简单介绍

    随着VS2013的发布,微软在Asp.Net中引入了很多新的特性,比如使用新的权限验证模块Identity, 使用Async来提高Web服务器的吞吐量和效率等.其中一个不得不提的是OWIN和Katan ...

随机推荐

  1. Linux-压缩与归档

    压缩:gzip/gunzip.bzip2/bunzip2.xz/unxz 归档:tar ####归档+压缩:zip 1. gzip, gunzip, zcat - compress or expand ...

  2. 受邀与微软售前技术团队参与TFS技术沟通会议

    微软正式发布Azure DevOps Server 2019的第一个版本,作为Team Foundation Server (TFS)2018的升级版本和替代产品. 作为开发运维一体化平台的主打产品, ...

  3. WPF自定义控件开发实例 - ColorPicker

    开发环境:Win10 + VS2017 + .Net4.5 这个 ColorPicker 是<<WPF编程宝典:使用C#2012和.NET4.5>>这本书中的例子.这里我记录一 ...

  4. spring cloud学习(一) 服务注册

    首先spring-cloud相关的简介可以去百度搜索,这里就不多说了,这里分享一个翻译spring cloud官网的中文网站spring cloud中文网 这个学习项目的代码放在 https://gi ...

  5. 移动端font-size适配方案(续)

    概述 之前写过一篇移动端font-size适配方案,但是在实践过程中,还是发现当时的思维太局限了,视野太窄了,所以现在补充更新一下,记录下来,供以后开发时参考,相信对其他人也有用. 我上一篇博文主要有 ...

  6. [JavaScript] iframe更改了src后,父页面history.back只能后退iframe而不能使自己后退解决办法

    浏览器的机制如此,在iframe导航变化后手动点击浏览器的后退按钮也依然只是后退iframe中的导航. 有一种解决方案是不要修改iframe.src,而是删除旧iframe元素,新建一个iframe元 ...

  7. Asp.net管线事件(页面请求周期)

    在处理该请求时将由 HttpApplication 类执行以下事件. 希望扩展 HttpApplication 类的开发人员尤其需要注意这些事件. . 对请求进行验证,将检查浏览器发送的信息,并确定其 ...

  8. 机器学习-Matplotlib绘图(柱状图,曲线图,点图)

    matplotlib 作为机器学习三大剑客之一   ,比热按时无比强大的 matplotlib是绘图库,所以呢我就分享一下简单的绘图方式 #柱状图 #导报 柱状图 import matplotlib. ...

  9. js 开发过程中经验及总结记录

    一   let 和 var 作用域    1  普通用法 for (var i = 0; i < 5; i++) { console.log(i); } console.log(i); //-- ...

  10. mongo数据查询操作

    本文来源于 :Stephen Liu 1.  基本查询:     构造查询数据.    > db.test.findOne()    {         "_id" : Ob ...