C# 实体类
3.1??????使用實體類構(gòu)建三層結(jié)構(gòu)概述
?
在上一章中的三層架構(gòu)中,我們使用DataSet來進(jìn)行數(shù)據(jù)的傳遞,但在OOP的開發(fā)中,有很大的局限性:
1.???DataSet不具備良好的面向?qū)ο筇匦?#xff0c;使用起來不夠直觀、方便。
2.???對DataSet中的數(shù)據(jù)進(jìn)行查找時容易出錯。例如:我們要查詢DataSet中學(xué)員信息DataTable中的某個值時,必須指定行索引與列名,這只是一個簡單的查詢,如果稍微復(fù)雜就需要遍歷所有的行集。
3.???由于DataSet的核心結(jié)構(gòu)與數(shù)據(jù)庫的核心結(jié)構(gòu)完全相同,所以它把數(shù)據(jù)結(jié)構(gòu)完全暴露在表示層和業(yè)務(wù)邏輯層。
?
使用實體類的主要好處來自一個簡單的事實,即實體類是完全受我們控制的對象,它具有面向?qū)ο蟮幕咎卣鳌N覀兛梢宰杂傻叵驅(qū)嶓w類添加行為(如:判斷是否為空,如果為空指定默認(rèn)值,這只是一個簡單的擴展。其實和DataSet一樣,業(yè)務(wù)實體也承載著一個數(shù)據(jù)載體的任務(wù),實體類在三層結(jié)構(gòu)中的應(yīng)用如下圖所示:
?
?
?
?????????????????????????????????????????????????3.2 業(yè)務(wù)實體類
?業(yè)務(wù)實體類術(shù)語叫“Data Transfer Object(數(shù)據(jù)傳輸對象)”,主要用來在各層間傳輸數(shù)據(jù),因此沒有定義方法,當(dāng)然有需要定義一些驗證是否有效的方法。
?
?
?????????????????????????????????????????????????3.3 實體類的使用
?
在表示層中使用實體類需要做兩件事。
(1)將解析實體對象中封裝的數(shù)據(jù)展示給用戶。
當(dāng)表示層接收到從業(yè)務(wù)邏輯層返回的實體對象,并將實體對象中封裝的信息展示給用戶時,表示層需要對實體對象中封裝的信息進(jìn)行解析。表示層對實體對象的解析分兩種情況:
第一種是對單個實體對象進(jìn)行解析,這種解析一般常用的數(shù)據(jù)展示控件為:TextBox(文本框)、Label(標(biāo)簽)等控件,它們通常有一個Text屬性用于展示數(shù)據(jù)。可以通過業(yè)務(wù)實體對象的屬性獲得實體對象中的數(shù)據(jù),將獲得的屬性值賦給“Text”屬性。
第二種是對實體對象集合進(jìn)行解析。將多個業(yè)務(wù)實體對象封裝到List<T>中稱為實體對象集合,對實體對象集合的解析,Visual Studio中已經(jīng)封裝好的控件如:DataGridView(數(shù)據(jù)表格視圖)控件、ComboBox(下拉列表)控件等,它們都有一個數(shù)據(jù)源屬性(DataSource),可以直接將實體對象集合綁定到數(shù)據(jù)源屬性上。
?
(2)將用戶請求的數(shù)據(jù)封裝到實體對象中
在表示層,我們?nèi)绾螌⒂脩粽埱蟮臄?shù)據(jù)封裝到實體對象中,我們首先需要實例化實體對象,然后將用戶的請求賦值給實體對象中的對應(yīng)的屬性。
?
3.3.1在表示層使用實體類:如下圖所示:
?????????
?
表示層使用實體類用于封裝數(shù)據(jù)或?qū)嶓w數(shù)據(jù)進(jìn)行解析。
?
3.3.2?????在業(yè)務(wù)邏輯層中使用實體類
?
業(yè)務(wù)邏輯層實體類的使用不同于表示層,它主要負(fù)責(zé)傳輸實體對象,并對實體對象中封裝的數(shù)據(jù)進(jìn)行處理。需要做兩件事情:
(1)將接收到得實體對象傳輸?shù)较乱粚印?/p>
當(dāng)業(yè)務(wù)邏輯層接收到裝有信息的業(yè)務(wù)實體對象后,根據(jù)請求或響應(yīng)將實體對象傳到下一層。
(2)根據(jù)用戶請求對實體對象中的數(shù)據(jù)進(jìn)行處理。
當(dāng)我們使用實體類開發(fā)三層應(yīng)用程序時,數(shù)據(jù)處理來自兩個方面。
一.???????????業(yè)務(wù)實體對數(shù)據(jù)的處理,實體類本身是由屬性組成的,而大多都是可讀可寫屬性。所以,根據(jù)請求的不同可以給屬性設(shè)置不同的值,例如:當(dāng)用戶的請求為空時,給屬性設(shè)置默認(rèn)值。
二.???????????業(yè)務(wù)邏輯對數(shù)據(jù)的處理,例如:用戶登錄,用戶的身份分管理員和普通員工,此時業(yè)務(wù)邏輯層根據(jù)用戶身份分別進(jìn)行不同的處理。
業(yè)務(wù)邏輯層使用實體類如下圖所示:
?
3.3.3 在數(shù)據(jù)訪問層中使用實體類
?
在數(shù)據(jù)訪問層中使用實體類需要做兩件事情。
(1)將數(shù)據(jù)庫中的數(shù)據(jù)封裝到實體對象中或?qū)⒍鄠€實體對象封裝成集合。
當(dāng)用戶的請求時數(shù)據(jù)查詢請求時,數(shù)據(jù)訪問層需要實現(xiàn)對數(shù)據(jù)庫的查詢訪問。當(dāng)請求的結(jié)果只有一條記錄時,我們將這條記錄封裝成一個實體對象。當(dāng)請求的結(jié)果是多條記錄時,我們將每一條記錄封裝成一個實體對象,然后再將多個實體對象封裝成集合(將多個實體對象封裝到List<T>中)。
(2)將實體對象中的數(shù)據(jù)保存到數(shù)據(jù)庫中。
當(dāng)用戶的請求是數(shù)據(jù)保存請求時,數(shù)據(jù)訪問層首先對實體對象中封裝的數(shù)據(jù)進(jìn)行解析,然后將解析出的數(shù)據(jù)保存到數(shù)據(jù)庫中。
數(shù)據(jù)訪問層使用實體類如下圖所示:
?
|
??????????????????
?
【
??? 實體類為我們整個項目的開發(fā)提供了很大的靈活性。它把數(shù)據(jù)庫中的表用面向?qū)ο蟮乃枷氤橄蟪深?#xff0c;使數(shù)據(jù)作為對象來使用,消除了關(guān)系數(shù)據(jù)與表之間的差別,在三層結(jié)構(gòu)開發(fā)中使用實體類更有助于項目的維護(hù)、擴展,更能體現(xiàn)三層結(jié)構(gòu)開發(fā)的優(yōu)勢。
】
?
通過上面的學(xué)習(xí),我們學(xué)到了如下知識:
n???????為什么在三層結(jié)構(gòu)中使用實體類、實體類的含義及如何自定義實體類。
n???????如何將用戶請求的數(shù)據(jù)封裝到實體對象中,以及如何解析得到實體對象中的數(shù)據(jù)。
n???????如何返回多個實體對象。
?
?
3.4 項目實戰(zhàn):使用業(yè)務(wù)實體類代替DataSet
在本章我們使用使用業(yè)務(wù)實體類代替DataSet實現(xiàn)三層結(jié)構(gòu),首先我們在三層結(jié)構(gòu)框架下添加一個業(yè)務(wù)實體項目,如下圖所示:
?
?
在第一章的基礎(chǔ)上,我們現(xiàn)將完成本章任務(wù)的步驟概括如下:
(1)實現(xiàn)業(yè)務(wù)實體
①、?????????新增項目Model
②、?????????在其他項目中添加對業(yè)務(wù)實體項目的引用
③、?????????添加需求所用數(shù)據(jù)庫中表對應(yīng)的實體類
④、?????????編寫業(yè)務(wù)實體類
(2)設(shè)計用戶界面
(3)實現(xiàn)數(shù)據(jù)訪問層
(4)實現(xiàn)業(yè)務(wù)邏輯層
(5)實現(xiàn)表示層數(shù)據(jù)綁定
?
3.4.1 創(chuàng)建業(yè)務(wù)實體項目
?
(1)在已經(jīng)搭建的三層結(jié)構(gòu)解決方案上,右鍵單擊項目名,選擇“添加”->“新建項目”命令,如下圖所示:
|
?
?
(2)在彈出的“添加新項目”對話框中選擇項目類型為“Visual C#”,模板為”類庫”,并填寫項目名稱為“Model”,單擊“確定”按鈕,如下圖所示:
?
?
(3)業(yè)務(wù)實體項目添加完畢。根據(jù)業(yè)務(wù)實體在三層結(jié)構(gòu)中的作用與地位,我們需要添加表示層、數(shù)據(jù)訪問層以及業(yè)務(wù)邏輯層對業(yè)務(wù)實體的依賴。依賴關(guān)系如下圖所示:
?
?
下面我們根據(jù)本章任務(wù)所需,添加業(yè)務(wù)實體類。
(1)在業(yè)務(wù)實體項目“Model”項目上右擊,選擇“添加”->“新建項”命令,如下圖所示:
?
?
(2)依次添加管理員實體類(Admin)、學(xué)期信息類(Sem)、學(xué)生信息類(Student)、科目信息類(Subject)。學(xué)期信息類(Sem)代碼如下:
示例1:
using System;
using System.Collections.Generic;
using System.Text;
?
namespace Model
{
??? [Serializable]
??? public class Sem
??? {
??????? private intid;
?
??????? public intId
??????? {
??????????? get {return id; }
???? ???????set { id = value; }
??????? }
??????? privatestring semName;
?
??????? publicstring SemName
??????? {
??????????? get {return semName; }
??????????? set {semName = value; }
??????? }
??????? privateshort lessonNum;
?
??????? public shortLessonNum
??????? {
??????????? get {return lessonNum; }
??????????? set {lessonNum = value; }
??????? }
??????? privatefloat spending;
?
??????? public floatSpending
??????? {
??????????? get {return spending; }
??????????? set {spending = value; }
??????? }
?
??????? public Sem()
??????? {
???????????
??????? }
??? }
}
?
根據(jù)數(shù)據(jù)編寫實體類時,我們需要注意以下幾點。
(1)表中的每一個字段,對應(yīng)實體類中的一個private(或protected)類型的字段和一個public類型的屬性。
(2)表中字段的類型要與屬性的類型相匹配。例如:數(shù)據(jù)庫中的char、varchar類型與C#中的string類型匹配。
(3)在業(yè)務(wù)實體類前面一半要加上序列化屬性[Serializable],它會對實體類中的所有字段、屬性進(jìn)行序列化處理,序列化的主要目的是為了提高數(shù)據(jù)傳輸中的性能與安全性。
?
3.4.3 實現(xiàn)數(shù)據(jù)訪問層
?
??? 在編寫數(shù)據(jù)訪問層之前,首先接觸下using語句。using語句作為關(guān)鍵字,在第一學(xué)期主要用于引用命名空間。
??? 作為語句,using語句允許用戶定義一個范圍,并在此范圍內(nèi)末尾自動釋放對象。例如在using語句范圍內(nèi)定義了一個數(shù)據(jù)庫連接對象,當(dāng)程序執(zhí)行到using語句末尾時,將自動釋放此數(shù)據(jù)庫連接對象,從而大大簡化了代碼,并在一定程度上提高了資源使用效率。
??? 完成本章任務(wù)需要使用的對象如下:
(1)實例化SqlConnection對象,實現(xiàn)數(shù)據(jù)庫連接。
(2)實例化SqlCommand對象,執(zhí)行Sql命令。
(3)實例化SqlDataReader對象,讀取數(shù)據(jù)。
(4)使用實體對象傳遞數(shù)據(jù)。
(5)使用List<T>傳遞實體對象集合。
?
當(dāng)我們掌握了Ado.NET、實體類、List<T>、using語句的使用時,我們現(xiàn)在實現(xiàn)對他們的綜合使用。
?
3.4.3 實現(xiàn)業(yè)務(wù)邏輯層
?
在實現(xiàn)業(yè)務(wù)邏輯層之前,我們對實現(xiàn)的步驟進(jìn)行一個簡單概括。
(1)在業(yè)務(wù)邏輯處理類中引用數(shù)據(jù)訪問層命名空間、業(yè)務(wù)實體命名空間。
(2)實例化業(yè)務(wù)實體對象。
(3)實例化數(shù)據(jù)訪問對象。
(4)調(diào)用數(shù)據(jù)訪問功能。
(5)實現(xiàn)業(yè)務(wù)邏輯功能。
根據(jù)數(shù)據(jù)訪問層實現(xiàn)的功能,業(yè)務(wù)邏輯層主要完成根據(jù)不同的用戶類型調(diào)用不同的數(shù)據(jù)訪問方法,通過判斷用戶類型得到學(xué)員用戶的用戶狀態(tài)信息。
?
3.4.4實現(xiàn)表示層數(shù)據(jù)綁定
?
表示層主要實現(xiàn)的功能有:根據(jù)用戶輸入的信息判斷是否為空,是否為有效狀態(tài),驗證是否通過等。
?
//本章代碼,詳見代碼共享區(qū)
?
小結(jié):
n???????用OOP實現(xiàn)三層架構(gòu)時,業(yè)務(wù)實體類是三層之間數(shù)據(jù)傳遞的載體。
n???????在使用實體類開發(fā)三層結(jié)構(gòu)時,用戶的請求需要返回實體對象集合時,可使用List<T>實現(xiàn)。
n???????using關(guān)鍵字在C#中有兩種用途
1.???作為指令,引用命名空間;
2.???作為語句,用于定義一個范圍,在此范圍末自動釋放對象。
n?????在三層結(jié)構(gòu)中,我們使用實體類消除關(guān)系數(shù)據(jù)庫與類之間的差別,以更好地使用OOP的思想來架構(gòu)我們的系統(tǒng)。
?
作業(yè):
完善第二章自己已經(jīng)架構(gòu)好的MIS系統(tǒng),豐富完善數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層和表示層,使用業(yè)務(wù)實體類來在各層之間傳輸數(shù)據(jù)。
?
?
?
?
?
3.1??????使用實體類構(gòu)建三層結(jié)構(gòu)概述
?
在上一章中的三層架構(gòu)中,我們使用DataSet來進(jìn)行數(shù)據(jù)的傳遞,但在OOP的開發(fā)中,有很大的局限性:
1.???DataSet不具備良好的面向?qū)ο筇匦?#xff0c;使用起來不夠直觀、方便。
2.???對DataSet中的數(shù)據(jù)進(jìn)行查找時容易出錯。例如:我們要查詢DataSet中學(xué)員信息DataTable中的某個值時,必須指定行索引與列名,這只是一個簡單的查詢,如果稍微復(fù)雜就需要遍歷所有的行集。
3.???由于DataSet的核心結(jié)構(gòu)與數(shù)據(jù)庫的核心結(jié)構(gòu)完全相同,所以它把數(shù)據(jù)結(jié)構(gòu)完全暴露在表示層和業(yè)務(wù)邏輯層。
?
使用實體類的主要好處來自一個簡單的事實,即實體類是完全受我們控制的對象,它具有面向?qū)ο蟮幕咎卣鳌N覀兛梢宰杂傻叵驅(qū)嶓w類添加行為(如:判斷是否為空,如果為空指定默認(rèn)值,這只是一個簡單的擴展。其實和DataSet一樣,業(yè)務(wù)實體也承載著一個數(shù)據(jù)載體的任務(wù),實體類在三層結(jié)構(gòu)中的應(yīng)用如下圖所示:
?
?
?
?????????????????????????????????????????????????3.2 業(yè)務(wù)實體類
?業(yè)務(wù)實體類術(shù)語叫“Data Transfer Object(數(shù)據(jù)傳輸對象)”,主要用來在各層間傳輸數(shù)據(jù),因此沒有定義方法,當(dāng)然有需要定義一些驗證是否有效的方法。
?
?
?????????????????????????????????????????????????3.3 實體類的使用
?
在表示層中使用實體類需要做兩件事。
(1)將解析實體對象中封裝的數(shù)據(jù)展示給用戶。
當(dāng)表示層接收到從業(yè)務(wù)邏輯層返回的實體對象,并將實體對象中封裝的信息展示給用戶時,表示層需要對實體對象中封裝的信息進(jìn)行解析。表示層對實體對象的解析分兩種情況:
第一種是對單個實體對象進(jìn)行解析,這種解析一般常用的數(shù)據(jù)展示控件為:TextBox(文本框)、Label(標(biāo)簽)等控件,它們通常有一個Text屬性用于展示數(shù)據(jù)。可以通過業(yè)務(wù)實體對象的屬性獲得實體對象中的數(shù)據(jù),將獲得的屬性值賦給“Text”屬性。
第二種是對實體對象集合進(jìn)行解析。將多個業(yè)務(wù)實體對象封裝到List<T>中稱為實體對象集合,對實體對象集合的解析,Visual Studio中已經(jīng)封裝好的控件如:DataGridView(數(shù)據(jù)表格視圖)控件、ComboBox(下拉列表)控件等,它們都有一個數(shù)據(jù)源屬性(DataSource),可以直接將實體對象集合綁定到數(shù)據(jù)源屬性上。
?
(2)將用戶請求的數(shù)據(jù)封裝到實體對象中
在表示層,我們?nèi)绾螌⒂脩粽埱蟮臄?shù)據(jù)封裝到實體對象中,我們首先需要實例化實體對象,然后將用戶的請求賦值給實體對象中的對應(yīng)的屬性。
?
3.3.1在表示層使用實體類:如下圖所示:
?????????
?
表示層使用實體類用于封裝數(shù)據(jù)或?qū)嶓w數(shù)據(jù)進(jìn)行解析。
?
3.3.2?????在業(yè)務(wù)邏輯層中使用實體類
?
業(yè)務(wù)邏輯層實體類的使用不同于表示層,它主要負(fù)責(zé)傳輸實體對象,并對實體對象中封裝的數(shù)據(jù)進(jìn)行處理。需要做兩件事情:
(1)將接收到得實體對象傳輸?shù)较乱粚印?/p>
當(dāng)業(yè)務(wù)邏輯層接收到裝有信息的業(yè)務(wù)實體對象后,根據(jù)請求或響應(yīng)將實體對象傳到下一層。
(2)根據(jù)用戶請求對實體對象中的數(shù)據(jù)進(jìn)行處理。
當(dāng)我們使用實體類開發(fā)三層應(yīng)用程序時,數(shù)據(jù)處理來自兩個方面。
一.???????????業(yè)務(wù)實體對數(shù)據(jù)的處理,實體類本身是由屬性組成的,而大多都是可讀可寫屬性。所以,根據(jù)請求的不同可以給屬性設(shè)置不同的值,例如:當(dāng)用戶的請求為空時,給屬性設(shè)置默認(rèn)值。
二.???????????業(yè)務(wù)邏輯對數(shù)據(jù)的處理,例如:用戶登錄,用戶的身份分管理員和普通員工,此時業(yè)務(wù)邏輯層根據(jù)用戶身份分別進(jìn)行不同的處理。
業(yè)務(wù)邏輯層使用實體類如下圖所示:
?
3.3.3 在數(shù)據(jù)訪問層中使用實體類
?
在數(shù)據(jù)訪問層中使用實體類需要做兩件事情。
(1)將數(shù)據(jù)庫中的數(shù)據(jù)封裝到實體對象中或?qū)⒍鄠€實體對象封裝成集合。
當(dāng)用戶的請求時數(shù)據(jù)查詢請求時,數(shù)據(jù)訪問層需要實現(xiàn)對數(shù)據(jù)庫的查詢訪問。當(dāng)請求的結(jié)果只有一條記錄時,我們將這條記錄封裝成一個實體對象。當(dāng)請求的結(jié)果是多條記錄時,我們將每一條記錄封裝成一個實體對象,然后再將多個實體對象封裝成集合(將多個實體對象封裝到List<T>中)。
(2)將實體對象中的數(shù)據(jù)保存到數(shù)據(jù)庫中。
當(dāng)用戶的請求是數(shù)據(jù)保存請求時,數(shù)據(jù)訪問層首先對實體對象中封裝的數(shù)據(jù)進(jìn)行解析,然后將解析出的數(shù)據(jù)保存到數(shù)據(jù)庫中。
數(shù)據(jù)訪問層使用實體類如下圖所示:
?
|
??????????????????
?
【
??? 實體類為我們整個項目的開發(fā)提供了很大的靈活性。它把數(shù)據(jù)庫中的表用面向?qū)ο蟮乃枷氤橄蟪深?#xff0c;使數(shù)據(jù)作為對象來使用,消除了關(guān)系數(shù)據(jù)與表之間的差別,在三層結(jié)構(gòu)開發(fā)中使用實體類更有助于項目的維護(hù)、擴展,更能體現(xiàn)三層結(jié)構(gòu)開發(fā)的優(yōu)勢。
】
?
通過上面的學(xué)習(xí),我們學(xué)到了如下知識:
n???????為什么在三層結(jié)構(gòu)中使用實體類、實體類的含義及如何自定義實體類。
n???????如何將用戶請求的數(shù)據(jù)封裝到實體對象中,以及如何解析得到實體對象中的數(shù)據(jù)。
n???????如何返回多個實體對象。
?
?
3.4 項目實戰(zhàn):使用業(yè)務(wù)實體類代替DataSet
在本章我們使用使用業(yè)務(wù)實體類代替DataSet實現(xiàn)三層結(jié)構(gòu),首先我們在三層結(jié)構(gòu)框架下添加一個業(yè)務(wù)實體項目,如下圖所示:
?
?
在第一章的基礎(chǔ)上,我們現(xiàn)將完成本章任務(wù)的步驟概括如下:
(1)實現(xiàn)業(yè)務(wù)實體
①、?????????新增項目Model
②、?????????在其他項目中添加對業(yè)務(wù)實體項目的引用
③、?????????添加需求所用數(shù)據(jù)庫中表對應(yīng)的實體類
④、?????????編寫業(yè)務(wù)實體類
(2)設(shè)計用戶界面
(3)實現(xiàn)數(shù)據(jù)訪問層
(4)實現(xiàn)業(yè)務(wù)邏輯層
(5)實現(xiàn)表示層數(shù)據(jù)綁定
?
3.4.1 創(chuàng)建業(yè)務(wù)實體項目
?
(1)在已經(jīng)搭建的三層結(jié)構(gòu)解決方案上,右鍵單擊項目名,選擇“添加”->“新建項目”命令,如下圖所示:
|
?
?
(2)在彈出的“添加新項目”對話框中選擇項目類型為“Visual C#”,模板為”類庫”,并填寫項目名稱為“Model”,單擊“確定”按鈕,如下圖所示:
?
?
(3)業(yè)務(wù)實體項目添加完畢。根據(jù)業(yè)務(wù)實體在三層結(jié)構(gòu)中的作用與地位,我們需要添加表示層、數(shù)據(jù)訪問層以及業(yè)務(wù)邏輯層對業(yè)務(wù)實體的依賴。依賴關(guān)系如下圖所示:
?
?
下面我們根據(jù)本章任務(wù)所需,添加業(yè)務(wù)實體類。
(1)在業(yè)務(wù)實體項目“Model”項目上右擊,選擇“添加”->“新建項”命令,如下圖所示:
?
?
(2)依次添加管理員實體類(Admin)、學(xué)期信息類(Sem)、學(xué)生信息類(Student)、科目信息類(Subject)。學(xué)期信息類(Sem)代碼如下:
示例1:
using System;
using System.Collections.Generic;
using System.Text;
?
namespace Model
{
??? [Serializable]
??? public class Sem
??? {
??????? private intid;
?
??????? public intId
??????? {
??????????? get {return id; }
???? ???????set { id = value; }
??????? }
??????? privatestring semName;
?
??????? publicstring SemName
??????? {
??????????? get {return semName; }
??????????? set {semName = value; }
??????? }
??????? privateshort lessonNum;
?
??????? public shortLessonNum
??????? {
??????????? get {return lessonNum; }
??????????? set {lessonNum = value; }
??????? }
??????? privatefloat spending;
?
??????? public floatSpending
??????? {
??????????? get {return spending; }
??????????? set {spending = value; }
??????? }
?
??????? public Sem()
??????? {
???????????
??????? }
??? }
}
?
根據(jù)數(shù)據(jù)編寫實體類時,我們需要注意以下幾點。
(1)表中的每一個字段,對應(yīng)實體類中的一個private(或protected)類型的字段和一個public類型的屬性。
(2)表中字段的類型要與屬性的類型相匹配。例如:數(shù)據(jù)庫中的char、varchar類型與C#中的string類型匹配。
(3)在業(yè)務(wù)實體類前面一半要加上序列化屬性[Serializable],它會對實體類中的所有字段、屬性進(jìn)行序列化處理,序列化的主要目的是為了提高數(shù)據(jù)傳輸中的性能與安全性。
?
3.4.3 實現(xiàn)數(shù)據(jù)訪問層
?
??? 在編寫數(shù)據(jù)訪問層之前,首先接觸下using語句。using語句作為關(guān)鍵字,在第一學(xué)期主要用于引用命名空間。
??? 作為語句,using語句允許用戶定義一個范圍,并在此范圍內(nèi)末尾自動釋放對象。例如在using語句范圍內(nèi)定義了一個數(shù)據(jù)庫連接對象,當(dāng)程序執(zhí)行到using語句末尾時,將自動釋放此數(shù)據(jù)庫連接對象,從而大大簡化了代碼,并在一定程度上提高了資源使用效率。
??? 完成本章任務(wù)需要使用的對象如下:
(1)實例化SqlConnection對象,實現(xiàn)數(shù)據(jù)庫連接。
(2)實例化SqlCommand對象,執(zhí)行Sql命令。
(3)實例化SqlDataReader對象,讀取數(shù)據(jù)。
(4)使用實體對象傳遞數(shù)據(jù)。
(5)使用List<T>傳遞實體對象集合。
?
當(dāng)我們掌握了Ado.NET、實體類、List<T>、using語句的使用時,我們現(xiàn)在實現(xiàn)對他們的綜合使用。
?
3.4.3 實現(xiàn)業(yè)務(wù)邏輯層
?
在實現(xiàn)業(yè)務(wù)邏輯層之前,我們對實現(xiàn)的步驟進(jìn)行一個簡單概括。
(1)在業(yè)務(wù)邏輯處理類中引用數(shù)據(jù)訪問層命名空間、業(yè)務(wù)實體命名空間。
(2)實例化業(yè)務(wù)實體對象。
(3)實例化數(shù)據(jù)訪問對象。
(4)調(diào)用數(shù)據(jù)訪問功能。
(5)實現(xiàn)業(yè)務(wù)邏輯功能。
根據(jù)數(shù)據(jù)訪問層實現(xiàn)的功能,業(yè)務(wù)邏輯層主要完成根據(jù)不同的用戶類型調(diào)用不同的數(shù)據(jù)訪問方法,通過判斷用戶類型得到學(xué)員用戶的用戶狀態(tài)信息。
?
3.4.4實現(xiàn)表示層數(shù)據(jù)綁定
?
表示層主要實現(xiàn)的功能有:根據(jù)用戶輸入的信息判斷是否為空,是否為有效狀態(tài),驗證是否通過等。
?
//本章代碼,詳見代碼共享區(qū)
?
小結(jié):
n???????用OOP實現(xiàn)三層架構(gòu)時,業(yè)務(wù)實體類是三層之間數(shù)據(jù)傳遞的載體。
n???????在使用實體類開發(fā)三層結(jié)構(gòu)時,用戶的請求需要返回實體對象集合時,可使用List<T>實現(xiàn)。
n???????using關(guān)鍵字在C#中有兩種用途
1.???作為指令,引用命名空間;
2.???作為語句,用于定義一個范圍,在此范圍末自動釋放對象。
n?????在三層結(jié)構(gòu)中,我們使用實體類消除關(guān)系數(shù)據(jù)庫與類之間的差別,以更好地使用OOP的思想來架構(gòu)我們的系統(tǒng)。
?
作業(yè):
完善第二章自己已經(jīng)架構(gòu)好的MIS系統(tǒng),豐富完善數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層和表示層,使用業(yè)務(wù)實體類來在各層之間傳輸數(shù)據(jù)。
?
轉(zhuǎn)載于:https://www.cnblogs.com/shiguanji/p/6661317.html
總結(jié)
- 上一篇: java正则校验密码
- 下一篇: Computing Curricula