三层架构-----实践篇-登录小实例
上一篇博客小編簡單介紹了一下我們在軟件開發過程中應用到的三層架構基本理論。光有理論還是遠遠不夠的,只有真正的
在項目中實踐過,才能更好地理解它的精髓所在。接下來小編以一個實現登錄功能的小例子來展現三層架構是如何應用到我
們的軟件開發過程中的。
?
?⑴首先我們需要搭建基本框架:
? ? ? ?? 打開我們的VS,新建一個解決方案,在解決方案下面建立類庫,
這包括三層架構里面的基本三層,且還需要一個實體層,也就是在該解決方案下面有四個類庫。
⑵其次我們要設置好層與層之間的引用關系:
? ? ? ? 具體的引用關系,請參看上篇博客。
⑶再次我們要添加需要的類了:
? ? ? ? 在上一步建立好的類庫下面建立需要的類。由于U層與用戶打交道,用于人機交互,所以U層需要建立Windows窗體;其它層只需建立普通的類即可。
⑷最后我們需要設計UI 并進行編碼了:
? ? ?? 這一步,首先需要我們對用戶界面進行設計,滿足業務需求;然后進行編碼以實現需求。
? ? ?? 在編碼過程中,首先,我們要寫好實體層,定義好編碼過程中所需要的字段(字段是是私有的,若是公有的,在使用過程中可能被意外修改),以及字段對應的屬性(是公有的,用于傳參,對字段起保護作用,在使用過程中防止字段被意外修改)。
? ? ?? 其次,我們要連接數據庫。與數據庫打交道的是D層,所以我們要將連接數據庫的代碼寫到D層。
? ? ? ?①在D層新建一個類,用于編寫連接數據庫的字符串
? ? ?
class DbUtil {//創建連接數據庫的字符串public static string ConnString =@"Server=(SQL server 服務器的名字);Database=(數據庫名字);UserID=(SQL server 登錄名);Password=(SQL server 登錄密碼)";}?小貼士:如果忘記了登錄密碼,請不要著急喲,可以先選擇Windows身份驗證進行登錄,然后再修改密碼進行密碼重置即可。
? ??②在D層再新建一個類,用于編寫SQL語句,并創建數據庫連接
public class UserDAL{//編寫類型為UserInfo的SelectUser方法,并定義需要的用戶名和密碼參數public UserInfo SelectUser(string userName,string password){//using作用:1、? 引用命名空間;2、? 為命名空間或類型創建別名;3、? 使用using語句 //在這里,使用using語句的作用:using語句允許程序員指定使用資源的對象應當何時釋放資源, //using語句中使用的對象必須實現IDisposable接口.此接口提供了Dispose方法,該方法將釋放此對象的資源。 //在程序編譯階段,編譯器會自動將using語句生成try-finally語句,并在finally塊中調用對象的Dispose方法來清理資源. //所以,using語句等效于try-finally語句using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))//創建數據庫的連接對象{//創建SqlCommand連接對象SqlCommand cmd = conn.CreateCommand();//為連接對象獲取SQL語句cmd.CommandText = @"SELECT ID,UserName,Password,EmailFROM USERS WHERE UserName=@UserName AND Password=@Password";//為連接對象獲取CommandType值cmd.CommandType = CommandType.Text;//為連接對象添加參數cmd.Parameters.Add(new SqlParameter("@UserName", userName));cmd.Parameters.Add(new SqlParameter("@Password", password));//打開連接conn.Open();//應用SqlCommand類的方法ExecuteReader(),此方法用于用戶進行的查詢操作,它的返回類型為SqlDataReader//執行查詢操作SqlDataReader reader= cmd.ExecuteReader();//聲明一個UserInfo類型的用戶user 且為空UserInfo user = null;//使用SqlDataReader對象的Read()方法進行逐行讀取while (reader.Read()){if (user==null)//如果用戶對象user為Null{user = new UserInfo();//則創建一個新的對象}//如果查詢到的用戶對象不為Null,則獲取用戶對象的信息user.ID = reader.GetInt32(0);user.UserName = reader.GetString(1);user.Password = reader.GetString(2);if (!reader.IsDBNull(3)){user.Email = reader.GetString(3);}}//執行查詢語句后,將查詢結果返回,返回一個用戶對象 傳給B層return user;}}}? ? ③在B層新建一個類,用于編寫邏輯判斷
//B層邏輯判斷的登錄方法public UserInfo UserLogin(string userName,string password){//實例化D層UserDAL uDao = new UserDAL();//調用D層的查詢方法,將返回來的對象用UserInfo類型來接收UserInfo user= uDao.SelectUser(userName, password);//將參數傳給D層,進行SQL語句的查詢//判斷返回的對象是否為Nullif (user!=null )//登錄成功{//將查詢后的結果 返回來的對象傳給U層return user;}else{throw new Exception("登錄失敗。");}}??④在U層中已建好的Windows窗體中編寫代碼
//登錄按鈕的單擊事件private void btnLogin_Click(object sender, EventArgs e){//定義string類型的變量,用于接收用戶輸入的用戶名string userName = txtUserName.Text.Trim();//定義string類型的變量,用于接收用戶輸入的密碼string password = txtPassword.Text;//實例化B層的類,創建該類型的對象Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();//實例化實體層的類,創建UserInfo類型的對象,并調用B層的登錄方法Login.Model.UserInfo user= mgr.UserLogin(userName, password);//將參數傳給B層MessageBox.Show("登錄用戶:" + user.UserName);}?到此為止,一個簡單的登錄小實例就完成啦,是不是感覺并不難呢。
通過在項目中的實踐,當我們實現某一功能時,小編認為,我們首先要明確業務需求;然后根據業務需求設計用戶界面;接著由用戶界面涉及到的數據庫中某表里的字段編寫實體層,定義字段、屬性用于傳參;最后進行編碼。由D層向B層再向U層進行編寫代碼,這樣當我們需要實體或實例化某一層的類來創建對象時,不會出現實例化時無該類的情況。
?感謝您的閱讀,如有不當之處,還望您能及時斧正喲;若對您有幫助,記得給小編點個贊喲!(*^▽^*)
總結
以上是生活随笔為你收集整理的三层架构-----实践篇-登录小实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三层架构---理论篇
- 下一篇: “七层架构”---理论篇