簡單工廠

今天學習了網站開發的一種方法--簡單工廠。
 它分爲七層,創建流程爲:

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;
       }
 

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