zoukankan      html  css  js  c++  java
  • 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; }
            }
    View Code


    还有一个私有方法,它是用来创建参数的。如果size传入为-1的话,系统将使用默认数据类型长度。

     private SqlParameter CreateParameter(string parameterName, SqlDbType dbType, Int32 size, object value)
            {
                SqlParameter sqlParameter;
                if (size > 0)
                    sqlParameter = new SqlParameter(parameterName, dbType, size);
                else
                    sqlParameter = new SqlParameter(parameterName, dbType);
    
                sqlParameter.Direction = ParameterDirection.Input;
                sqlParameter.Value = value;
    
                return sqlParameter;
            }
    View Code


    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


    注:文章太长了,写成续集,请关注......

  • 相关阅读:
    BZOJ 1191 HNOI2006 超级英雄hero
    BZOJ 2442 Usaco2011 Open 修建草坪
    BZOJ 1812 IOI 2005 riv
    OJ 1159 holiday
    BZOJ 1491 NOI 2007 社交网络
    NOIP2014 D1 T3
    BZOJ 2423 HAOI 2010 最长公共子序列
    LCA模板
    NOIP 2015 D1T2信息传递
    数据结构
  • 原文地址:https://www.cnblogs.com/insus/p/3826706.html
Copyright © 2011-2022 走看看