【C#】機房重構之七層登陸
阿新 • • 發佈:2018-10-31
what?
- 實體層(Entity):主要是用來封裝一些功能性程式碼,定義實體型別和實體集合,用於各層次傳遞引數
- 資料訪問層(DAL):提供基本的資料訪問,該層將有關資料庫的操作放在單獨的一個類中,針對資料的增刪改查
- 介面層(IDAL):定義一個統一的介面,解除B層與D層的耦合
- 工廠層(Factory):登入中用到的是抽象工廠+反射+配置檔案。靈活的實現了資料庫的連線,提高了程式碼的靈活性
- 業務邏輯層(BLL):負責處理業務邏輯
- 外觀層(Facade):此處運用了外觀模式,層與層之間不直接產生聯絡,解除了B層與U層之間的耦合。
- 表示層(UI):
UML圖
包圖之間的關係更加形象的描繪了各個層之間的關係。除了D層與介面層之間是實現關係,其他包之間都是依賴關係。同時也表明了在程式碼中如何編寫的問題。(UML包圖瞭解)【此資源來自百度,如有侵權,還請告知,定馬上刪除】
三層與七層
三層是學習七層的基礎,將三層學習的很精,在學習七層的時候就會很容易,七層只是在三層的基礎上多了外觀層,介面層,工廠層和實體層。外觀層的存在是為了解除解除了B層與U層之間的耦合,介面層的存在是為了解除B層與D層的耦合,而實體層在學習三層的時候也出現了,工廠層是為了提高程式碼的靈活性。
程式碼實現
Entity層
//定義變數
private string _userid; //使用者ID
private string _username;//使用者名稱字
private string _password;//密碼
//封裝變數
public string UserId
{
get
{
return _userid;
}
set
{
_userid = value ;
}
}
public string Username
{
get
{
return _username;
}
set
{
_username = value;
}
}
public string Password
{
get
{
return _password;
}
set
{
_password = value;
}
}
DAL層
loginDAL
public class LoginDAL : IDAL.LoginIDAL
{
public DataTable selectUser(Entity.UserInfo userInfo)
{
SQLHelper sqlHelper = new SQLHelper();
SqlParameter[] sqlParams = { new SqlParameter("@userID", userInfo.UserId), new SqlParameter("@passWord",userInfo.Password) };
string sql = @"select * from User_info where [email protected] and [email protected]";
DataTable table = sqlHelper.ExecuteQuery(sql,sqlParams,CommandType.Text);
return table;
}
}
SQLHelper
public class SQLHelper
{
private SqlConnection conn = null;
private SqlCommand cmd = null;
private SqlDataReader sdr = null;
public SQLHelper()
{
string connStr = System.Configuration.ConfigurationManager.AppSettings["connStr"];
conn = new SqlConnection(connStr);
}
//判斷資料庫連線的情況
private SqlConnection GetConn()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn;
}
/// <summary>
/// 執行帶引數的查詢SQL語句或儲存過程
/// </summary>
/// <param name="cmdText">查詢SQL語句或儲存過程</param>
/// <param name="paras">引數集合</param>
/// <param name="ct">命令型別</param>
/// <returns></returns>
public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(cmdText, GetConn());
cmd.CommandType = ct;
cmd.Parameters.AddRange(paras);
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr);
}
return dt;
}
IDAL層
public interface LoginIDAL
{
DataTable selectUser(Entity.UserInfo userInfo);
}
Factory層
public class LoginFactory
{
string strDB = System.Configuration.ConfigurationManager.AppSettings["DB"];
public IDAL.LoginIDAL CreateUser()
{
string ClassName = strDB + "." + "LoginDAL";
return (IDAL.LoginIDAL)Assembly.Load(strDB).CreateInstance(ClassName);//反射的應用
}
}
BLL層
public class LoginBLL
{
public bool UserBLL(Entity.UserInfo UserInfo)
{
Factory.LoginFactory fact = new Factory.LoginFactory(); //例項化工廠
IDAL.LoginIDAL idal = fact.CreateUser();//呼叫工廠方法建立介面
DataTable table = idal.selectUser(UserInfo);
bool flag;
if (table.Rows.Count==0)
{
flag = false;
}
else
{
flag = true;
}
return flag;
}
}
Facade層
public class LoginFacade
{
public Boolean selectUser(Entity.UserInfo user)
{
bool flag;
BLL.LoginBLL userBLL = new BLL.LoginBLL();
flag = userBLL.UserBLL(user);
return flag;
}
}
UI層
if (txtUserNme.Text == "")
{
MessageBox.Show("請您輸入使用者名稱!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtUserNme.Focus();
}
else if (txtPassWord.Text == "")
{
MessageBox.Show("請您輸入密碼!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtPassWord.Focus();
}
else
{
try
{
//例項化實體類
Facade.LoginFacade loginFacade = new Facade.LoginFacade();
//DataTable UserBack = new DataTable();
Entity.UserInfo User = new Entity.UserInfo();
//將輸入的使用者名稱和密碼賦值給定義的變數
User.UserId = Convert.ToString(txtUserNme.Text.Trim());
User.Password = Convert.ToString(txtPassWord.Text.Trim());
Boolean flag = false;
flag = loginFacade.selectUser(User);
if (flag != false)
{
this.Hide();
this.DialogResult = System.Windows.Forms.DialogResult.OK;
frmMain frmMain = new frmMain();
frmMain.Show();
}
else
{
MessageBox.Show("使用者名稱或者密碼錯誤", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
throw ex;
}
總結
七層登陸是一個簡單練手的功能,也是對七層架構的初步認識,通過看“巨人們”的部落格,讓我對七層有了更多的瞭解。