在web開發(fā)中常常用到工廠模式三層架構(gòu),現(xiàn)在也在Winform中應(yīng)用這種架構(gòu)方式,嘗試了很多,也模仿了經(jīng)典例子PetShop,但是還是不行,也參考了網(wǎng)上的一些例子?,F(xiàn)在把我這個例子的整個制作過程簡單的介紹一下。(由于本例子是介紹三層結(jié)構(gòu),所以只是簡單的應(yīng)用,如果你覺得這種方式好,請自己實現(xiàn)其他模塊)
結(jié)構(gòu):
-------PMIS--------主程序代碼
表示層,負(fù)責(zé)應(yīng)用程序的表現(xiàn)形式、用戶體驗等。
-------DALFactory-----抽象工廠
抽象工廠,用于創(chuàng)建各種數(shù)據(jù)對象的方法,這里有配置文件和反射的運用。
-------IDAL--------數(shù)據(jù)接口層(控制是選擇什么類型的數(shù)據(jù)庫)
數(shù)據(jù)操作接口,數(shù)據(jù)訪問層實現(xiàn)其接口并重寫它(體現(xiàn)了面向接口的編程思想)。
-------BLL------
處理應(yīng)用程序的業(yè)務(wù)邏輯,被表示層調(diào)用。
-------Model-------構(gòu)造模型(對應(yīng)數(shù)據(jù)庫字段)
Model程序集,存放實體類,用于數(shù)據(jù)訪問層和邏輯層調(diào)用
-------SQLServerDAL----SQLServer數(shù)據(jù)訪問層
數(shù)據(jù)訪問層,實現(xiàn)具體的select、update、delete....操作,重寫IDAL接口。
-------DBUtility----公共數(shù)據(jù)訪問層
數(shù)據(jù)處理層,實現(xiàn)具體的ExecuteReader,ExecuteDataTable,ExecuteNonQuery等。
-------Utility----公共層
實現(xiàn)從配置文件中讀取數(shù)據(jù)庫聯(lián)接字符串。
1、數(shù)據(jù)庫結(jié)構(gòu)
數(shù)據(jù)庫名PMIS
表Admin
[ID] [bigint] 編號
[Name] [varchar](10) 名稱
[PassWord] [varchar](100) 密碼
略......
建表語句
CREATE TABLE [dbo].[Admin](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [varchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[PassWord] [varchar](100) COLLATE Chinese_PRC_CI_AS NOT NULL,
[PurviewID] [int] NOT NULL,
[Remember] [int] NULL,
[AutoRun] [int] NULL,
[DepartmentsID] [bigint] NULL,
CONSTRAINT [PK_管理員_1] PRIMARY KEY CLUSTERED
(
[ID] ASC
) ON [PRIMARY]
) ON [PRIMARY]
2、接著建立數(shù)據(jù)庫模型
Model
#region 內(nèi)部成員字段
private int _id;
private string _Name;
private string _Password;
略...
#endregion
#region 方法
public AdminInfo() { }
public AdminInfo(string userName, string password)
{
this._Name = userName;
this._Password = password;
}
#endregion
3、建立DALFactory-----抽象工廠
public static IDAL.IAdmin Create()
{
string path=System.Configuration.ConfigurationSettings.AppSettings["DAL"];
string className="SQLServerDAL.Admin";
IDAL.IAdmin acount=(IDAL.IAdmin)Assembly.Load(path).CreateInstance(className);
return acount;
}
4、建立IDAL--------數(shù)據(jù)接口層
public interface IAdmin
{
AdminInfo Login(string userName, string password);
int Insert(AdminInfo account);
int Update(AdminInfo account);
}
5、建立Utility----公共層
public static string ConnectionString()
{
return (ConfigurationSettings.AppSettings["ConnectionString"]);
}
6、建立DBUtility----公共數(shù)據(jù)訪問層和SQLServer數(shù)據(jù)訪問層
DBUtility中建立SQLHelper類
SQLServerDAL的Admin類需要繼承IAdmin
public class Admin:IAdmin
{}
Admin類主要實現(xiàn)用戶登陸功能
7、建立業(yè)務(wù)邏輯曾BLL
方法public static AdminInfo Login(string userName, string password){}
8、為PMIS主程序添加應(yīng)用程序配置文件app.config
添加<appSettings>
<add key="ConnectionString" value="server=.;uid=sa;pwd=;database=PMIS"></add>
<add key="DAL" value="SQLServerDAL"></add>
</appSettings>
在主程序的窗體中添加控件,為按鈕添加事件
if (BLL.Admin.Login(參數(shù)) == null)
{
//處理...
}
else
{
//處理...
}