简单工厂

今天学习了网站开发的一种方法--简单工厂。
 它分为七层,创建流程为:

1.网站项目

2.Data(Model)程序集:用来放数据实体类

3.IDAL程序集:用来放针对表的操作接口(增删改查等操作方法)

4.OledbDAL(SqlDAL):实现针对表的操作,其中要写helper类,和实现IDAL中操作的类。

5.DALFactory程序集:工厂,用来实现对不同数据库操作类对象的创建

6.BLL程序集: 业务逻辑层,用来针对功能方法,调用不同表的操作。

它的引用关系:
1.IDAL引用DATA
2.OledbDAL(SqlDAL) 引用 IDAL和Data(Model)
3.DALFactory 引用 IDAL,Data(Model),OledbDAL(SqlDAL)
4.BLL 引用 DALFactory,IDAL,Data(Model)
5.网站项目 引用 BLL

下面以登录窗体为例,代码如下:

可以在web文件中配置字符串例如:
<appSettings>
<add key="conn" value="Data Source=.;Initial Catalog=NewDB;Integrated Security=True"/>
<add key="DAL" value="DALSqlHelper"/>//在Factory中要用
</appSettings>
或者<connectionStrings>
<add name="conn" connectionString="DataSource=.;InitialCatalog=NewDB;Integrated Security=True"/>
</connectionStrings>
第四层的Helper类代码如下:
SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["Key值"]);//或者使用ConfigurationManager类
        protected SqlCommand CreateCmd(string sql, List<SqlParameter> listp)
        {
            SqlCommand cmd = new SqlCommand(sql, conn);
            if (listp != null)
            {
                foreach (SqlParameter op in listp)
                {
                    if (op.Value != null)
                    {
                        cmd.Parameters.Add(op);
                    }
                }
            }
            return cmd;
        }
        protected int ExeNo(string sql, List<SqlParameter> listp)//增删改操作
        {
            SqlCommand cmd = CreateCmd(sql, listp);
            conn.Open();
            int i = cmd.ExecuteNonQuery();
            conn.Close();
            return i;
        }
//查询操作
        protected DataTable ExeTable(string sql, List<SqlParameter> listp)
        {
            SqlCommand cmd = CreateCmd(sql, listp);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds.Tables[0];

        }

        protected DataTable ExeTable(string sql)
        {
            return ExeTable(sql, null);
        }
在Admin类中写sql语句,它继承SqlHelper类,IDAL.IAdmin接口
List<SqlParameter>listp;//装有sql语句和参数的集合
       public void GetData(Data.Admin ad)
       {
           listp = new List<SqlParameter>();
           listp.Add(new SqlParameter("@id", ad.Id));
           listp.Add(new SqlParameter("@username", ad.UserName));
           listp.Add(new SqlParameter("@userpws", ad.UserPws));

       }

       public DataTable Login()
       {
           listp = new List<SqlParameter>();
           Data.Admin ad = new Data.Admin();
           listp.Add(new SqlParameter("@username", ad.UserName));
           listp.Add(new SqlParameter("@userpws", ad.UserPws));
           string sql = "select * from [User] where username=@username and userpws=@userpws";
           return ExeTable(sql, listp);

       }
在DALFactory类库中Factory类中写如下代码:
string str=ConfigurationSettings.AppSettings ["DAL"];
       private static Factory instance;

       public static Factory Instance
       {
           get { return new Factory (); }
          
       }
       public IDAL.IAdmin GetAdmin()
       { //判断使用哪种数据库
           //IDAL.INewsClass newsclass = new OledbDAL.NewsClass();
            //switch (dal)
            //{
            //    case "Oledb":
            //        newsclass = new OledbDAL.NewsClass();
            //        break;
            //    case "Sql":
            //        newsclass = new SqlDAL.NewsClass();
            //        break;
            //}
            //return newsclass;

           object obj = Assembly.Load(str).CreateInstance(str + ".Admin"); //通过程序集路径和类名创建对象实例(反射)
           return (IDAL.IAdmin)obj;
       }
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章