今天學習了網站開發的一種方法--簡單工廠。
它分爲七層,創建流程爲:
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;
}