我的.net工厂模式三层结构

第一部份:工厂模式

一、项目名称及描述:(实现步骤为:4-3-6-5-2-1)
1、WEB=表示层
2、BLL=业务逻辑层
3、IDAL=数据访问层接口定义
4、Model=业务实体
5、DALFactory=数据层的抽象工厂(创建反射)
6、SQLServerDAL=SQLServer数据访问层 / OracleDAL=Oracle数据访问层

DBUtility 数据库访问组件基础类(SqlDbHelper,OracleDbHelper,等)

二、项目引用关系
1、Web 引用 BLL
2、BLL 引用 IDALModel,使用DALFactory创建实例。
3、IDAL 引用 Model
4、Model 无引用。
5、DALFactory 引用IDAL,通过读取web.config里设置的程序集,加载类的实例,返回给BLL使用。
6、SQLServerDAL 引用 ModelIDAL,被DALFactory加载的程序集,实现接口里的方法。

 

三、实现步骤(7步走)

数据库user表

1 create table t_user
2 (
3 id int identity(1,1),                 /*流水号*/
4 uid varchar(10) primary key,          /*登录名*/
5 uname varchar(50),                    /*昵称*/
6 upassword varchar(50),                /*密码*/
7 ulevel varchar(10)                    /*用户级别*/
8 )

 

1、创建Model,实现业务实体。(每张表对应一个实体模型)

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace Model
 7 {
 8     public class UserInfo
 9     {
10         private string _uId;
11         private string _uName;
12         private string _uPassword;
13         private string _uLevel;
14 
15         //构造函数
16         public UserInfo(string uid,string uname,string upassword,string ulevel)
17         {
18             this._uId = uid;
19             this._uName = uname;
20             this._uPassword = upassword;
21             this._uLevel = ulevel;
22         }
23         public string uId
24         {
25             get {return this._uId;}
26             set { this._uId = value; }
27         }
28         public string uName
29         {
30             get { return this._uName; }
31             set { this._uName = value; }
32         }
33         public string uPassword
34         {
35             get { return this._uPassword; }
36             set { this._uPassword = value; }
37         }
38         public string uLevel
39         {
40             get { return this._uLevel; }
41             set { this._uLevel = value; }
42         }
43         
44     }
45 }

 

2、创建IDAL,实现接口。(增删改查)(每张表对应一个接口)

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using Model;
 6 
 7 namespace IDAL
 8 {
 9     public interface IUser
10     {
11         //取得所有User
12         IList<UserInfo> GetAllUser();
13         //按ID取得单个User
14         UserInfo GetUserByID(string uId);
15         //增加
16         int AddUser(UserInfo userInfo);
17         //修改
18         int UpdateUser(UserInfo userInfo);
19         //删除
20         int DeleteUser(string uId);
21         //判断用户名和密码是否存在
22         bool CheckUser(string uId, string uPassword);
23     }
24 }

 

3、创建SQLServerDAL,实现接口里的方法。(引用DBUtility的DBHelper 实现增删改查)(每张表对应一个操作类Operater)

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

using Model;
using DBUtility;
using IDAL;



namespace SQLServerDAL
{
    public class UserOper:IUser
    {


        #region IUser 成员

        //获取所有user信息
        public IList<UserInfo> GetAllUser()
        {
            //throw new NotImplementedException();
            IList<UserInfo> userInfo = new List<UserInfo>();
            using (SqlDataReader dr = DBUtility.SqlDbHelper.ExecuteReader("select * from t_user"))
            {
                while (dr.Read())
                {
                    UserInfo _user = new UserInfo(dr[1].ToString(), dr[2].ToString(), dr[3].ToString(), dr[4].ToString());
                    userInfo.Add(_user);
                }
            }
            return userInfo;
        }

        //按ID查询USER信息
        public UserInfo GetUserByID(string uId)
        {
            UserInfo _user=null;
            using (SqlDataReader dr = DBUtility.SqlDbHelper.ExecuteReader("select top 1 * from t_user where uid='" + uId + "'"))
            {
                if (dr.Read())
                {
                    _user=new UserInfo(dr[1].ToString(), dr[2].ToString(), dr[3].ToString(), dr[4].ToString());
                }
            }
            return _user;
        }

        //增加一条记录
        public int AddUser(UserInfo userInfo)
        {
            //throw new NotImplementedException();
            //return 1;
            string sql = "insert into t_user values('" + userInfo.uId + "','" + userInfo.uName + "','" + userInfo.uPassword + "','" + userInfo.uLevel + "')";
            return DBUtility.SqlDbHelper.ExecuteNonQuery(sql);

        }

        //更新一条数据
        public int UpdateUser(UserInfo userInfo)
        {
            string sql = "update t_user set uname='" + userInfo.uName + "',upassword='" + userInfo.uPassword + "',ulevel='" + userInfo.uLevel + "' where uid='" + userInfo.uId + "'";
            return DBUtility.SqlDbHelper.ExecuteNonQuery(sql);
        }

        //删除一条数据
        public int DeleteUser(string uId)
        {
            string sql = "delete from t_user where uid='" + uId + "'";
            return DBUtility.SqlDbHelper.ExecuteNonQuery(sql);
        }

        //判断用户名和密码是否正确
        public bool CheckUser(string uId, string uPassword)
        {
            string sql = "select count(*) from t_user where uid='" + uId + "' and upassword='" + uPassword + "'";
            object obj = DBUtility.SqlDbHelper.ExecuteScalar(sql);
            if (obj != null)
            {
                if(Convert.ToInt32(obj)>0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }

        #endregion
    }
}

 

4、增加(Web层)web.config里的配置信息,为SQLServerDAL的程序集。

    <appSettings><add key="WebDAL" value="SQLServerDAL"/> </appSettings>

5、创建DALFactory,返回程序集的指定类的实例(DataAccess类)。代码

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Reflection;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Configuration;
 7 using IDAL;
 8 
 9 namespace DALFactory
10 {
11     public sealed class DataAccess
12     {
13         //读取从web.config程序集
14         private static readonly string AssemblyPath = ConfigurationSettings.AppSettings["WebDAL"].ToString();
15 
16         //创建SQLServerDAL实例对象
17         public static object CreateObject(string AssemblyPath, string ClassNamespace)
18         {
19             //有加命名空间时 才需要增加这句
20             //ClassNamespace = "FactoryTest." + ClassNamespace;
21 
22            // object objType = DataCache.GetCache(ClassNamespace);//从缓存读取
23             object objType = null;
24             if (objType == null)
25             {
26                 try
27                 {
28                     objType = Assembly.Load(AssemblyPath).CreateInstance(ClassNamespace);//反射创建
29                    // DataCache.SetCache(ClassNamespace, objType);// 写入缓存
30                 }
31                 catch
32                 { }
33             }
34             return objType;
35         }
36 
37         //创建user实例实例对象
38         public static IUser  CreateUser()
39         {
40             string ClassNamespace = AssemblyPath + ".UserOper";
41             object obj = CreateObject(AssemblyPath, ClassNamespace);
42             return (IDAL.IUser)obj;
43         }
44     }
45 }

 

 

 

6、创建BLL,调用DALFactory,得到程序集指定类的实例,完成数据操作方法。代码:

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using IDAL;
 6 using Model;
 7 
 8 
 9 
10 
11 namespace BLL
12 {
13     public class UserBLL
14     {
15         private static readonly IUser dal = DALFactory.DataAccess.CreateUser();
16 
17         //获取所有user信息
18         public IList<UserInfo> GetAllUser()
19         {
20             return dal.GetAllUser();
21         }
22         //增加一条记录
23         public int AddUser(UserInfo userInfo)
24         {
25             return dal.AddUser(userInfo);
26         }
27         //更新一条数据
28         public int UpdateUser(UserInfo userInfo)
29         {
30             return dal.UpdateUser(userInfo);
31         }
32 
33         //按ID查询USER信息
34         public UserInfo GetUserByID(string uid)
35         {
36             return dal.GetUserByID(uid);
37         }
38         //删除一条数据
39         public int DeleteUser(string uid)
40         {
41             return dal.DeleteUser(uid);
42         }
43         //检查用户名和密码是否正确
44         public bool CheckUser(string uid,string upassword)
45         {
46             return dal.CheckUser(uid, upassword);
47         }
48     }
49 
50 }

7、创建WEB,调用BLL里的数据操作方法。

 

1         private void bindToGv()
2         {
3             BLL.UserBLL user = new BLL.UserBLL();
4             this.GridView2.DataSource = user.GetAllUser();
5             this.GridView2.DataBind();
6         }

 

 

 

 

 

 

 

posted @ 2012-09-10 17:47  loklook123  阅读(246)  评论(0编辑  收藏  举报