三層


三層

三層只是一個比較好的軟件架構,不是非用三層不可。

界面層UI(user interface);

數據訪問層DAL(Data Access Layer);

業務邏輯層BLL(business logic layer )。實體類就是Model;對數據進行操作的代碼寫在DAL中,一般就是SQL語句,DAL只有對數據的操作,沒有“如果金額大於20則不能刪除”這樣的邏輯;BLL調用DAL中的代碼進行邏輯操作,比如“如果金額大於20則不能刪除”。SQL語句、ADO.Net的類一般只應該出現在DAL中。

 

先對比用SQLHelper和三層實現Age自增的區別。

我們先做個SQLHelper自增

 

一、設計好winform窗體

下面我們直接添加配置文件和SqlHelper

 

二、添加配置文件和SqlHelper

 

三、添加引用

 

四、添加配置文件

這樣的話配置文件和SqlHelper就都有了。

首先想一下,要寫之前還是要確定一下Sql語句。

 

五、確定Sql語句

 

六、VS代碼

 

七、SqlHelper執行結果

接下來我們用三層實現年齡自動增長:

 

八、寫好winform窗體

按照上一題的方法添加配置文件和SplHelper並添加引用。

用三層寫必須分的清清楚楚的。

剛寫好的winform窗體就可以理解成界面層UI。當然,也可以用ASP.NET的web頁面來表現,或者手機頁面。

還需要一個數據訪問層DAL,我們需要建個文件夾。

 

九、添加DAL文件夾

再建一個BLL凡是跟數據邏輯上有關系的都建在這里面。業務邏輯層BLL

 

十、業務邏輯層BLL

驗證數據是否存在就屬於業務邏輯。

SqlHelper跟數據庫打交道所以要把SqlHelper放到數據訪問層DAL里面。

 

十一、SqlHelper放到數據訪問層DAL里

接下來我要操作的是TblStudent這張表,我可能對這張表進行增刪查改各種操作。所以,我建個類,就是對TblStudent表進行的操作。它是對數據訪問層DAL,我們在TblStudent后面加個Dal。

 

十二、TblStudentDal類

 

十三、數據訪問層的代碼

再創建個類是業務邏輯層。

 

十四、業務邏輯層代碼

 

十五、界面層調業務邏輯層,業務邏輯層調數據訪問層

千萬不能界面層直接調數據訪問層,否則的話會造成很多的麻煩的。三層的目的就是分工明確,互不影響。

最后,我們看下執行的效果。

 

十六、執行后的效果

先記住:配置文件是和界面層UI在一起的。等會我寫案例,給大家演示一下。

 

下面我們用三層校驗用戶名和密碼。

 

十七、設計好登錄界面

然后我們要確定Sql語句,怎么樣判斷用戶名是否存在,密碼是否正確呢?

根據用戶輸入的用戶名,找到密碼

如果找到密碼,說明用戶名存在;如果密碼不存在說明用戶名不存在。

如果找到密碼,驗證一下是否正確,就可以判斷是否登陸成功了。

select     CC_AutoId,     CC_Loginpassword from T_Seats where CC_LoginId=@uid

2.寫數據訪問層

想一下執行完Sql語句返回的結果是什么呢?

怎么把一條記錄的多個列進行返回。

  數據訪問層,返回一個對象。(需要用到Model)

 

十八、寫好Model

 

十九、寫好數據訪問層

數據訪問層,根據用戶名獲取當前用戶的基本信息。

 

3.寫業務邏輯層。在年齡自動增長中的業務邏輯層就是個打醬油的。

這塊的業務邏輯層就得有東西了。

如何確定業務邏輯層的方法參數與返回值,根據表現層(調用者)的需求來確定。

 

二十、寫個枚舉

 

二十一、寫好MD5

 

二十二、寫好業務邏輯層

最后我們寫界面層

 

二十三、寫好界面層

好,看下最后的執行結果。

 

二十四、最后顯示效果

接下來我們實現修改密碼的功能:

修改密碼和我們ADO寫過的需求一模一樣。修改密碼的按鈕一開始是被禁用的。當成功之后,把登錄的id記下來,修改密碼按鈕可用。當點它的時候再彈出一個窗口來,這個窗口是用來修改密碼的。

 

二十五、寫好第一個窗體

 

二十六、寫好第二個窗體

想想怎么實現這個功能?

登錄成功以后啟動修改密碼按鈕,記住用戶的id,得寫個靜態類。那么這個類寫入哪一層呢?接下來就該確定下Sql語句,首先驗證下輸入新密碼是否正確(與Sql無關),驗證舊密碼時與Sql有關。

 

在做這個功能之前我們再看下三層的具體寫法。

UI → 表現層,數據的采集,與數據的展示。

Bll → 業務邏輯層,與業務相關的所有邏輯判斷與處理。

Dal → 數據訪問層,只是操作數據庫的操作,把sql語句執行,返回相應的結果。(一般不建議做任何邏輯處理。)

 

Model

像上題中判斷文本框是否為空,不能輸入特殊的符號等要放在業務邏輯層。判斷的是取出的數據是不是為空,不是文本框本身不是為空。

寫在界面層也行,但是我現在要把wins窗體換成web頁面,界面層中的判斷還得再寫一遍。要是寫在業務邏輯層的話,就只寫界面層的代碼就行了。

像注冊郵箱的判斷都是JS的功勞,不是業務邏輯層的問題。

 

二十七、JS判斷

 

二十八、界面層邏輯

靜態類在表現層

 

二十九、把Id從業務邏輯層傳出來

 

 

三十、界面層代碼

運行看下現在的效果。這樣做的好處是,不要等都寫完再調試。誰都不是神,這樣分步寫,容易找出自己寫的代碼的錯誤。

 

三十一、顯示第一部分成果

修改密碼操作首先是要確定Sql語句執行過程,思路:兩次輸入的新密碼是否一致,舊密碼是否正確,然后修改密碼。判斷一致不需要Sql語句,判斷舊密碼是否正確需要我們寫Sql語句。修改密碼也要寫Sql語句。

 

1.確定舊密碼是否正確的Sql語句

autoId,oldpwd

 

"select count(*) from T_Seats where cc_autoId=@autoid and cc_loginPassword=@pwd"

下面我們寫數據訪問層,由於還是操作那張表,不需要新建一個類。

 

三十二、數據訪問層代碼

修改密碼的操作也是一條Sql語句,

 

三十三、數據訪問層-修改密碼代碼

好了數據訪問層中的代碼寫完了,現在我們開始寫業務邏輯層中的代碼。

 

三十四、業務邏輯層用到的枚舉

 

三十五、業務邏輯層中的代碼

 

三十六、三層架構圖

 

三十七、兩個案例的流程圖

 

作者近期文章列表:

C#基礎教程(完全免費,獻給代碼愛好者的最好禮物。注:本作者分享自己精心整理的C#基礎教程,無任何商業目的。
希望與更多的代碼愛好者交流心得,也請高手多多指點!!!)
SQL數據庫 ADO.net 數據庫的應用圖解一
數據庫的應用詳解二
面向過程,面向對象中高級 面向過程,面向對象的深入理解一
面向過程,面向對象的深入理解二
面向對象的深入理解三
winform基礎 Winform基礎
winform中常用的控件
面向過程 三種循環的比較
C#中的方法(上)
我們常見的數組
面向對象 思想的轉變
C#中超級好用的類
C#中析構函數和命名空間的妙用
C#中超級好用的字符串
C#中如何快速處理字符串
值類型和引用類型及其它
ArrayList和HashTable妙用一
ArrayList和HashTable妙用二
文件管理File類
多態
C#中其它一些問題的小節
GDI+ 這些年我收集的GDI+代碼
這些年我收集的GDI+代碼2
HTML概述 你不能忽視的HTML語言
你不能忽視的HTML語言2精編篇
你不能忽視的HTML語言3
JavaScript基礎 JavaScript基礎一


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM