编程教程
您现在的位置: 中国个人站长站 >> 网络编程 >> ASP.NET教程 >> 教程正文 数据库层抽象工厂解决方案归档[不断升级版]
推荐位

数据库层抽象工厂解决方案归档[不断升级版]

中国个人站长站 ASP.NET教程 点击数: 更新时间:2007-7-9 3:57:24

    简单工厂模式就是根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个共同的父类和共同的方法,但是每个方法执行的任务不同,而且根据不同的数据进行了优化。比如X是一个基类,xy和xz是从它派生出来的,XFactory类根据给出的参数决定返回那一个子类,返回那一个类的实例与程序员无关,因为这些类有同样的方法,只是实现不同,返回那个类的实例取决于工厂,工厂功能可能很复杂,但通常都是相当简间的.

    接下来我们用一个例子来说明这个简单的工厂模式.假如我们要输入一个人的姓名,

    有两个方式,一种是“firstname lastname” 和“fristname,lastname”形式.我们的任务就是要确定lastname和firstname是否是逗号来确定姓名的先后.

第一步,设计一个父类:

    public class CName
    {
        protected  string frName ,lName;
        public string getFristName() { return frName;}
       
public string getLastName() { return lName;}
    }

第二步,设计两个子类,它是由类CName的派生的。它们现实了接口,并在构造function中将名字分成了两部分.在CFirstFirst类中,做了一个简单的假设:最后一个空格前面的所有部分都属与firstname.

    public class CFirstFirst : CName 
    {
        public CFirstFirst (string sName) 
        {
            int i = sName.Trim().Indexof(” “);
            if ( i >0 ) 
            { 
                frName  = name.Substring(0,i).Trim();
               
lName = name.Substring(i+1).Trim();
           
}
           
else  
            {
                lName = sName;
                frName = “”;
            }
        }
    }

     在LastFist类中,用逗号给lastname划分界限.当空格或逗号不存在时,两个类都提供了错误校正处理.

    public class LastFrist  :CName  
    {
        public LastFrist(string sName) 
        {
            int i = sName.Indexof(”,”);
            if ( i>0 ) 
            {
                if ( i >0 ) 
                { 
                    lName = name.Substring(0,i).Trim();
                    frName = name.Substring(i+1).Trim();
                }
                else  
                {
                    lName = sName;
                    frName = “”;
                }
            }
        }
    }

两种情况下,都把分开的名字保存在基类的CName中保护变量中.所以在派生类中根本不需要任何getFirstName和getLastName方法,因为基类中已给出.

第三步: 构造简单工厂.

     现在很容易给出简单工厂类.只检查逗号来决定返回那个类的实例

    public class NameFactory ()
    { 
        public CName  getName(string sname)   
        {
            int i = sname.Indexof(”,”);
            if ( i >0 )
            {
                return new LastFrist  (sname);
            }
            else
            {
                return new CFirstFirst (sname);
            }
        }
    }

第四步。使用工厂类:

    string sName = “cedy hao”;
    NameFactory  nf = new NameFactory ();
    CName  name = nf.getName(sName);
    string sFristName = name.getFristName();
    string sLastName = name.getLastName();

    这种方法把和数据相关的问题与类的其它的方法分隔开来。采用抽象工厂模式设计出的系统类图如下:




数据库层抽象工厂解决方案归档:


(1)AbstractDbFactory.cs

using System;
using System.Data;

namespace DbService
{
    /// <summary>
    /// 数据库抽象工厂接口
    /// </summary>

    public interface AbstractDbFactory
    {
        /// <summary>
        /// 建立默认连接
        /// </summary>
        /// <returns>数据库连接</returns>

        IDbConnection CreateConnection();

        /// <summary>
        /// 根据连接字符串建立Connection对象
        /// </summary>
        /// <param name="strConn">连接字符串</param>
        /// <returns>Connection对象</returns>

        IDbConnection CreateConnection(string strConn);

        /// <summary>
        /// 建立Command对象
        /// </summary>
   &

[1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页

教程录入:swh    责任编辑:swh 
个人站长站与你风雨同舟!
本站所提供的资源均来源于互联网,如有侵权行为,请与本站管理员联系,我们会第一时间删除!
·如果您发现《数据库层抽象工厂解决方案归档[不断升级版]》文章有错误,也请通知我们修改!
联系邮箱chinageren#126.com,谢谢支持!
站内搜索:
版权所有:中国个人站长站 2007-2008 未经授权禁止复制或建立镜像 客服QQ号:112731235
copyright © 2007-2008 www.ChinaGeRen.com online services. all rights reserved. 苏ICP备05000059号