c三層架構講稿和學生選課管理完整(整理)_第1頁
c三層架構講稿和學生選課管理完整(整理)_第2頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、模塊概述 1本模塊工作任務 2本模塊學習目標 2任務 3-1 :三層架構劃分 2 效果與描述 2 相關知識與技能 23-1-1 三層架構的劃分原理 23-1-2 ORM (對象關系映射)3 任務的設計思路 4 任務的實施 4 舉一反三 4任務 3-2:數(shù)據(jù)訪問層 5效果與描述 5 相關知識與技能 53-2-1 泛型集合的定義與使用113-2-2 數(shù)據(jù)訪問層的設計思路5任務的設計思路 錯誤!未定義書簽。 任務的實施 6 舉一反三 8任務 3-3:業(yè)務邏輯層的實現(xiàn)8效果與描述 8 相關知識與技能 93-3-1 業(yè)務邏輯層的設計思路 9 任務的設計思路 錯誤!未定義書簽。 任務的實施 錯誤!未定義書

2、簽。 舉一反三 14任務 3-4:表示層的實現(xiàn) 錯誤!未定義書簽。 效果與描述 錯誤!未定義書簽。 相關知識與技能 錯誤!未定義書簽。3-4-1 界面層的設計思路 錯誤!未定義書簽。 任務的設計思路 錯誤!未定義書簽。 任務的實施 錯誤!未定義書簽。 舉一反三 錯誤!未定義書簽。本模塊小結 14本模塊作業(yè) 15模塊三 基于3層架構的課程管理模塊概述在上個模塊:單層的課程管理中,已實現(xiàn)數(shù)據(jù)庫的連接、命令的執(zhí)行、不同數(shù)據(jù)集的 應用,并利用應用程序配置文件,和自定義的數(shù)據(jù)操作類,對程序進行了優(yōu)化重構。實現(xiàn) 一個管理信息系統(tǒng)所需要的技術,似乎已全了。 但是,如果應用程序的功能需求不是這么簡單,而是有非

3、常復雜的流程。那么,如果按照上個模塊的做法,在最后的重構中設計了一些功能實現(xiàn)方法,并且在同一層調用,界面層 的代碼就會很長而無序。并且,一旦用戶需求改變,則對這么長的代碼進行重寫,是不可 行的。這種做法對于大型的軟件是不能承受的。因此,目前通用的做法是:將應用程序的實現(xiàn)分布在從底向高的三個層。數(shù)據(jù)訪問層實現(xiàn) 對數(shù)據(jù)庫記錄的操作,這對于特定DBMS 是固定的,不需更改的;業(yè)務邏輯層利用數(shù)據(jù)訪問層實現(xiàn)業(yè)務邏輯,這層是關鍵,如果用戶的業(yè)務需求改了,可以在這層中修改,因為這 層有很多獨立的方法,而且,改某個功能不會影響到別的功能,這種改動就比較科學;界 面層調用業(yè)務邏輯層實現(xiàn)用戶的功能,只要業(yè)務邏輯層

4、有這個功能,就可以調用,界面層 只需提供輸入輸出和提示等。這就是基于3 層架構的應用程序體系結構,是目前最通用的架構模式。本模塊工作任務任務 3-1:三層架構劃分任務 3-2:數(shù)據(jù)訪問層的實現(xiàn)任務 3-3:業(yè)務邏輯層的實現(xiàn)任務 3-4:表示層的實現(xiàn)本模塊學習目標1、掌握三層架構的劃分原理2、掌握各層的設計思路,和層之間的調用關系3、利用三層架構實現(xiàn)對課程管理模塊的重構4、鞏固 OOP 的基本概念和 OOP 的編程思路任務3-1:三層架構劃分效果與描述圖 3.1 包含多個工程的 3 層架構解決方案本任務要求學生能夠將原來的只有 1 個工程的課程管理模塊,重構為 工程的 3 層架構的模塊,并進行恰

5、當?shù)某跏蓟?,仍能實現(xiàn)課程記錄的添加、 瀏 此過程中理解3層架構的劃分原理,各層的任務,本任務的業(yè)務流程:圖 3.2 單層轉化為3層架構的業(yè)務流 相關知識與技能3-1-1 三層架構的劃分原理 三層架構的劃分如下圖:圖 3.3 三層架構原理圖1、各層的任務數(shù)據(jù)訪問層:使用 ADO.NET 中的數(shù)據(jù)操作類,為數(shù)據(jù)庫中的每個表,設計 1 個數(shù)據(jù)訪 問類。類中實現(xiàn):記錄的插入、刪除、單條記錄的查詢、記錄集的查詢、單條記錄的有無 判斷等基本的數(shù)據(jù)操作方法。對于一般的管理信息軟件,此層的設計是類似的,包含的方 法也基本相同。此層的任務是:封裝每個數(shù)據(jù)表的基本記錄操作,為實現(xiàn)業(yè)務邏輯提供數(shù) 據(jù)庫訪問基礎。業(yè)務

6、邏輯層:為用戶的每個功能模塊,設計1 個業(yè)務邏輯類,此時,需要利用相關的5 個t 間的調系業(yè)務邏輯層數(shù)據(jù)訪問層數(shù)據(jù)訪問層類中,記錄操作方法的特定集合,來實現(xiàn)每個邏輯功能。界面層:根據(jù)用戶的具體需求,為每個功能模塊,部署輸入控件、操作控件和輸出控 件,并調用業(yè)務邏輯層中類的方法實現(xiàn)功能。2、 層之間的調用關系 數(shù)據(jù)訪問層的類,直接訪問數(shù)據(jù)庫,實現(xiàn)基本記錄操作。 業(yè)務邏輯層的類,調用相關的數(shù)據(jù)訪問類,實現(xiàn)用戶所需功能。 界面層:部署控件后,調用業(yè)務邏輯層的類,實現(xiàn)功能。將應用程序的功能分層后,對于固定的DBMS,數(shù)據(jù)訪問層基本可以不變,一旦用戶的需求改變,首先修改業(yè)務邏輯層,界面層稍做改動即可。這

7、種做法使程序的可復用性、 可修改性,都得到了很好的改善,大大提高了軟件工程的效率。3-1-2 ORM (對象關系映射)在圖 3.1 中看到,除了界面層、業(yè)務邏輯層和數(shù)據(jù)訪問層之外,還有2 個工程。其中, Common 工程中一般放的是公用文件,如數(shù)據(jù)操作類 DBHelper 等,被數(shù)據(jù)訪問層的類 調用,其必要性在上個模塊已述。 Modal 工程中存放的是實體類。所謂的對象關系映射Object Relational Mapping,簡稱 ORM,是為了解決面向對象的類,與關系數(shù)據(jù)庫的表之間,存在的不匹配的現(xiàn)象,通過使用描述對象和關系之間映射的 元數(shù)據(jù),在程序中的類對象,與關系數(shù)據(jù)庫的表之間建立持

8、久的關系,用于在程序中描述 數(shù)據(jù)庫表。本質上就是將數(shù)據(jù)從一種形式轉換到另外一種形式。ORM 是一個廣義的概念,適應于關系數(shù)據(jù)庫與應用程序之間的各類數(shù)據(jù)轉換,目前有 許多自動轉換工具可用,如 codesmith 等。在本教材中,利用手工書寫代碼的形式,實現(xiàn) ORM。如對于學生選課管理系統(tǒng)數(shù)據(jù)庫中的課程表course,其設計視圖如下:圖 3.4 Course 表設計視圖 可以這樣設計類來描述它:publicclass Course privatestring courseId。publicstring CourseIdget return courseId。 set courseId = valu

9、e。 privatestringcourseName。publicstring CourseName get return courseName。 set courseName = value。 privateint courseCredit。publicint CourseCreditget return courseCredit。 set courseCredit = value。public Course() public Course( string courseId, string courseName, int courseCredit)this .courseId = cours

10、eId。this .courseName = courseName。this .courseCredit = courseCredit。將表中的每個字段抽取為類的字段(注意類型匹配),并封裝成屬性,設計構造函 數(shù),來將表抽取為類。這種類就稱為實體類。這個抽取過程稱為對象關系映射ORM。在 Modal 工程中,為數(shù)據(jù)庫的每個表,都設計一個相應的實體類,這樣,就相當于對 每個表實體,在 .NET 程序中,都可以通過類對象來應用。在上面介紹的3 層中,通常都會用到實體類對象。綜上所述,這 5 個工程之間的關系是這樣的:圖 3.5 三層架構中 5 個工程之間的關系圖 任務的設計思路1、在上個模塊基于單

11、層的課程管理的基礎上,將原有的WINDOWS 窗體應用程序的工程,設置為界面層,改名為UI,界面層的控件部署不用改變,并設置為啟動工程;2、 在解決方案中添加業(yè)務邏輯層工程BLL 數(shù)據(jù)訪問層工程DAL、Common 工程、Modal 工程,他們都是類庫型的工程;3、將 DBHelepr 類移到 Common 工程中;4、在 Modal 工程中,為學生選課管理系統(tǒng)的每個表,設計對應的實體類。5、設置好引用關系后,運行,可實現(xiàn)課程記錄的添加和瀏覽。注意:此時, 3 層結構雖已架設好,運行也可實現(xiàn)課程管理的記錄添加和瀏覽功能。 但是運行的仍是界面層代碼,其余層的代碼尚未設計。任務的實施1、 在原來的

12、版本中,用 1 個 WINDOWS 窗體應用工程就實現(xiàn)了課程管理,在3 層架構體系中,當然,這個工程就是界面層。首先,把原有的工程改名為UI,右擊此工程,改名即可。然后,右擊解決方案,選擇“設置啟動工程”,即可將界面層工程設置為啟動工程。2、 右擊解決方案,分別生成4 個新的工程,這些工程均是類庫工程,按照慣例,數(shù)據(jù)訪問層工程起名為 DAL,業(yè)務邏輯層工程起名為BLL,另外 2 個工程起名為 Common 和Modal。3、 右擊 Common,選擇添加”里的現(xiàn)有項”,將DBHelpe 啖添加入此工程。右擊UI 下原有的 DBHelper 類文件,選擇從工程中排除”。就實現(xiàn)了將DBHelep

13、啖移到 Common工程中。將命名空間改為 BFCourse.Common,其中 BFCourse 為解決方案名。以后每個工程中 的每個文件,都需要在前面加上解決方案名,這樣,就都處于同一個命名空間BFCourse。4、在 Modal 工程中,選擇添加新建項,參考課程表的抽取方法,為學生選課管理系 統(tǒng)的每個表,設計對應的實體類。同理,命名空間改為 BFCourse.Modal。5、 此時,界面層代碼會顯示 DBHelper 找不到,因為移到了 Common 工程。所以,必 須在界面層工程 UI 中添加對 Common 工程的引用。然后,整個系統(tǒng)就可以運行了。當 然,雖然形式是 3 層的,但實際

14、運行的是 UI 和 Common 中的代碼。舉一反三1、把選課系統(tǒng)數(shù)據(jù)庫的另外3 張表,學生表、選課表和用戶表,都進行對象關系映射,為其生成實體類。2、在包含 5 個工程的 3 層架構的系統(tǒng)中,為 DAL、BLL 工程添加類文件,只需添加空 文件,但命名方式按各層的功能需求設計,將所有需要的類文件添加齊全。任務3-2:課程添加的3層實現(xiàn)效果與描述效果圖仍然如圖 2.1 所示,實現(xiàn)課程記錄的添加。但需要用3 層的技術來實現(xiàn)。首先,回顧一下,記錄添加的業(yè)務流程,如圖 2.14 所示。要判斷輸入的完整性;然后 判斷輸入的課程號主鍵在數(shù)據(jù)庫中是否已有;若無,則插入記錄到數(shù)據(jù)庫中。然后,根據(jù)業(yè)務需求,從

15、底到高來設計每層。單純的判斷記錄有無、單純的記錄添加 操作,就可以放在數(shù)據(jù)訪問層。記錄添加的邏輯功能:判斷輸入的課程號主鍵在數(shù)據(jù)庫中 是否已有,若無,則插入記錄到數(shù)據(jù)庫中,則由業(yè)務邏輯層調用數(shù)據(jù)訪問層的添加方法來 實現(xiàn);最后,在界面層,其控件部署不用改變,只需判斷文本框的輸入完整性,然后調用 業(yè)務邏輯層的添加方法就可以了。本任務的設計流程如下 :圖 3.6 數(shù)據(jù)添加的 3 層設計流程 相關知識與技能3-2-1 數(shù)據(jù)訪問層的方法設計 一般為系統(tǒng)數(shù)據(jù)庫中的每個表設計一個數(shù)據(jù)訪問類,實現(xiàn)基本的記錄操作。為了實 現(xiàn)課程記錄的添加,目前,可在數(shù)據(jù)訪問類包含如下方法:1、 判斷某主鍵的記錄是否存在 方法名

16、: Exist 形參:代表主鍵的變量 返回值: bool 方法內代碼設計:( 1) 設計語句 select * from 表 where 主鍵名 =形參( 2) 利用 using 語句,調用 DBHelper 類,生成一個 datareader 對象( 3) 利用 HasRows 屬性判斷此 datareader 對象是否有行,若有,返回真,否則 返回假。應用場合:在插入記錄前判斷,若有則不用再插;在刪除記錄前判斷,若有則不 能刪。2、方法名: AddXX 形參:代表此表實體類的對象 返回值: int 方法內代碼設計: ( 1) 設計語句 insert(2) 調用 DBHelper 類,用 E

17、xeccuteNonQuery ()方法執(zhí)行此語句并返回。 應用場合:在表中添加一條記錄,根據(jù)返回值是否大于 0 判斷執(zhí)行成功否。3-2-2 業(yè)務邏輯層的方法設計 一般為系統(tǒng)中的每個功能模塊設計 1 個業(yè)務邏輯層的類,實現(xiàn)此模塊的所有業(yè)務邏輯。在課程添加中,所需要的業(yè)務邏輯為課程添加。首先,由于需要調用數(shù)據(jù)訪問類CourseAccess 因此,在類內設計 1 個字段為此類對象:CourseAccess courseAccess = newCourseAccess()。其次,此類需要設計如下方法:1、添加課程 方法名: AddXX 形參:課程類對象 返回值: void 方法內代碼設計:(1)調用

18、 CourseAccess 類對象的 Exist()方法,判斷形參所表示的課程類對象是 否存在,若存在方法返回;(2)調用 CourseAccess 類對象的 AddCourse()方法,添加課程,并利用返回值判 斷添加是否成功。3-2-3 界面層的設計 界面層的設計,首先需要根據(jù)用戶的功能需求部署恰當控件,這些控件部署在第2 模塊已實現(xiàn),不用改變。然后,把功能實現(xiàn)代碼放在恰當控件的恰當事件中,在這些代碼 中,需要調用業(yè)務邏輯層的方法實現(xiàn)。課程添加時,界面上主要的功能如下:1、 按下添加按鈕,實現(xiàn)課程記錄的插入(1)代碼放在按鈕的 CLICK 事件中;(2)代碼設計思路:首先進行控件的輸入正確

19、性驗證;其次利用控件的輸入值,生成1 個課程實體類對象;利用此對象,調用業(yè)務邏輯類對象的AddCourse ()方法,插入記錄;最后刷新瀏覽。任務的設計思路1、 在 DAL 工程中新建針對課程表的數(shù)據(jù)訪問類文件,將所需的2 個方法設計在內。2、在 BLL 工程中新建針對課程管理的業(yè)務邏輯類文件,并設計相關方法。3、優(yōu)化界面層代碼,調用業(yè)務邏輯層類的方法,實現(xiàn)添加。4、 在 DAL 工程中,要用到 DBHelper 類和課程實體類 Course,分別位于 Common 和Modal 工程中,所以,必須在工程中加入對此2 個工程的引用。同理,BLL 工程中,要用到CourseAccess 類和課程

20、實體類 Course,分別位于 DAL 和 Modal 工程中,所以,必須在工程 中加入對此 2 個工程的引用。UI 工程中,要用到 CourseBiz 類和課程實體類 Course,分別 位于 BLL 和 Modal工程中,所以,必須在工程中加入對此2 個工程的引用。任務的實施1、 右擊 DALX程,選擇新建類文件,命名為:CourseAccess.cs 命名空間改為BFCourse.DAL 右擊工程,選擇添加引用,選中工程里的Common 和 Modal,然后添加引用語句:using BFCourse.Modal。using BFCourse.Common2、CourseAccess 類中

21、判斷某課程記錄是否存在的方法:/根據(jù)課號判斷此課程是否存在/ /publicbool Exist( string courseId)string strSql = string .Format( select * from course where courseId=0 ,courseId)。using ( OleDbDataReader dr = DBHelper.GetReader(strSql)if (dr.HasRows) returntrue。else returnfalse。3、CourseAccess 類中添加課程的方法,注意形參是課程對象/利用課程對象添加課程/ publici

22、nt AddCourse( Course course)string strSql = string .Format( insert into coursevalues(0,1,2) ,course.CourseId,course.CourseName,course.C ourseCredit)。return DBHelper.ExecNonQuery(strSql)。4、 右擊 BLL 工程,選擇新建類文件,命名為: CourseBiz.cs。命名空間改為BFCourse.BLL 右擊工程,選擇添加引用,選中工程里的DAL 和 Modal,然后添加引用語句:using BFCourse.Mo

23、dal。using BFCourse.DAL。5、CourseBiz 類部分代碼publicclass CourseBizCourseAccess courseAccess = newCourseAccess()。/判斷邏輯,插入課程/publicvoid AddCourse( Course course)if (courseAccess.Exist(course.CourseId)M e s s a g e B ox.Show( 此課程號已存在,請重新輸入)。return。if (courseAccess.AddCourse(course) 0)M e s s a g e B ox.Show

24、( 添加成功)。elseM e s s a g e B ox.Show( 添加失敗)。6、右擊 UI 工程,命名空間改為 BFCourse.U。右擊工程,選擇添加引用,選中工程里的BLL 和 Modal,然后添加引用語句:using BFCourse.Modal。using BFCourse.BLL。7、界面層重構的部分代碼private void buttonAdd_Click(object sender, EventArgs e)if (textBox1.Text = String .Empty)MessageBox.Show(請輸入課程編號)。return。if (textBox2.Te

25、xt = String .Empty)MessageBox.Show(請輸入課程名稱)。return。if (textBox3.Text = String .Empty)MessageBox.Show(請輸入課程學分)。return。string courId = textBox1.Text.Trim()。string courName = textBox2.Text.Trim()。int courCredit = Convert .ToInt32(textBox3.Text.Trim()。Course course = newCourse(courId, courName, courCred

26、it)。CourseBizcb= newCourseBiz()。cb.AddCourse(course)。此時運行系統(tǒng),記錄添加的部分就是由這 3 層實現(xiàn)的,界面層按下“添加”按鈕后,調用 BLL 層的 void AddCourse(Course course)方法, 此方法又調用 DAL 層的 bool Exist(string courseld)和 int AddCourse(Course course)方法,它們再調用 DBHelper 中的具體數(shù)據(jù)記錄操作 方法。是一個標準的 3 層架構調用機制??偨Y: 3 層架構設計時,根據(jù)功能需求,從下而上設計,實際運行時,從上而下調 用。圖 3.

27、7 課程添加的 3 層調用流程舉一反三任務3-3:課程刪除的3層實現(xiàn)效果與描述圖 3.8 添加課程刪除功能后的課程管理界面效果圖如圖 所示,為了實現(xiàn)課程記錄的刪除,需要按主鍵刪除,所以添加了課程號的 文本框和刪除按鈕。用 3 層的技術來實現(xiàn)。首先,也需要理順記錄刪除的業(yè)務流程,如下圖所示。圖 3.9 課程刪除的業(yè)務流程要判斷輸入的完整性;然后判斷輸入的課程號主鍵在數(shù)據(jù)庫中是否已有;若有,則刪 除該主鍵的記錄。然后,根據(jù)業(yè)務需求,從底到高來設計每層。單純的判斷記錄有無,已在上個任務實 現(xiàn);單純的記錄刪除操作,就可以添加在課程表的數(shù)據(jù)訪問層類。記錄刪除的邏輯功能: 判斷輸入的課程號主鍵在數(shù)據(jù)庫中是

28、否已有,若有,則刪除記錄,由業(yè)務邏輯層添加調用 數(shù)據(jù)訪問層的刪除方法來實現(xiàn);最后,在界面層,只需判斷文本框的輸入完整性,然后調 用業(yè)務邏輯層的刪除方法。本任務的設計流程如記錄添加的設計流程,不再贅述。相關知識與技能3-3-1 數(shù)據(jù)訪問層的方法設計在上個任務的 CourseAccess 類中,為了實現(xiàn)刪除,需要添加的方法有:1、刪除記錄方法名: DelXX形參:代表主鍵的變量課程號返回值: int方法內代碼設計:( 1) 設計語句 delete( 2) 調用 DBHelper 類,用 ExeccuteNonQuery ()方法執(zhí)行此語句并返回 應用場合:在表中刪除一條記錄,根據(jù)返回值是否大于 0

29、 判斷執(zhí)行成功否。3-3-2 業(yè)務邏輯層的方法設計在上個任務的 CourseBiz 類中,為了實現(xiàn)刪除,需要添加的方法有:1、刪除課程方法名: DelXX形參:代表主鍵的變量課程號返回值: void方法內代碼設計:(1)調用 CourseAccess 類對象的 Exist()方法,判斷形參的課程類對象是否存在,若不存在方法返回;(2)調用 CourseAccess 類對象的 DelCourse()方法,刪除課程,并利用返回值判斷添加是否成功。3-3-3 界面層的設計界面層的設計,部署恰當控件后,把功能實現(xiàn)代碼放在恰當控件的恰當事件中。課程 刪除時,界面上主要的功能如下:1、 按下刪除按鈕,實現(xiàn)

30、課程記錄的刪除(1)代碼放在按鈕的 CLICK 事件中;(2)代碼設計思路:首先進行控件的輸入正確性驗證;將控件的值放在某變量中;利 用此變量作為實參,調用業(yè)務邏輯類對象的DelCourse ()方法,刪除記錄;最后刷新瀏覽。任務的設計思路1、在 DAL 工程中 CourseAccess 類,添加刪除課程的方法。2、在 BLL 工程中 CourseBiz 類,添加課程刪除相關方法。3、優(yōu)化界面層代碼,調用業(yè)務邏輯層類的方法,實現(xiàn)刪除。 任務的實施1、 在 CourseAccess 類中,添加如下方法: 刪除課程,注意形參是課程號/根據(jù)課程號刪除課程/publicint DelCourse( s

31、tring courseId)string strSql = string .Format( delete from course where courseId=0 , courseId)。return DBHelper.ExecNonQuery(strSql)。2、在 CourseBiz 類中,添加如下方法:/判斷邏輯,刪|除課程/publicvoid DelCourse( string courseId)if (!courseAccess.Exist(courseId)MessageBox.Show( 此課程號不存在,請重新輸入)。return。if (courseAccess.DelCo

32、urse(courseId) 0)MessageBox.Show( 添加成功)。elseMessageBox.Show( 添加失敗)。3、界面層重構的代碼如下:privatevoid buttonDel_Click( object sender, EventArgs e) if (textBox4.Text = String .Empty)MessageBox.Show( 請輸入課程編號)。return。string courId = textBox4.Text.Trim()。CourseBiz cb= newCourseBiz()。cb.DelCourse(courId)。此時運行系統(tǒng),記錄

33、刪除的部分就是由這 3 層實現(xiàn)的,界面層按下“刪除”按鈕后, 調用 BLL層的 void DelCourse(string courseld)方法,此方法又調用DAL 層的 bool Exist(stringcourseld)和 int DelCourse(string courseId)方法,它們再調用 DBHelper 中的具體數(shù)據(jù)記錄操作 方法。也是一個標準的 3 層架構調用機制。圖 3.10 課程刪除的 3 層調用流程舉一反三1、任務3-4:課程瀏覽的3層實現(xiàn)效果與描述在上面 2 個任務中,利用 3 層架構,實現(xiàn)了課程記錄的添加和刪除。在記錄添加和刪 除后,都需要重新刷新課程表的瀏覽;

34、在窗體加載時,也需要在數(shù)據(jù)網格中瀏覽課程表當 前所有記錄?;?3 層架構的課程記錄瀏覽還未實現(xiàn)。記錄瀏覽的業(yè)務流程比較簡單,就是再窗體加載時,添加、刪除記錄后,瀏覽課程表 當前的而所有記錄。記錄瀏覽在本質上就是:給數(shù)據(jù)網格提供數(shù)據(jù)源。數(shù)據(jù)源要求是1 個數(shù)據(jù)表 DateTable,或者是 1 種集合:如數(shù)組、集合、泛型集合等。根據(jù)業(yè)務需求,從底到高來設計每層。在課程表的數(shù)據(jù)訪問層類,添加瀏覽方法,將 課程表的當前所有記錄取出,并放入集合。在課程管理的業(yè)務邏輯層類,添加瀏覽方法, 調用數(shù)據(jù)訪問層的新方法,取得此集合;最后,在界面層,在恰當控件的恰當事件里,調 用業(yè)務邏輯層的瀏覽方法。本任務的設計

35、流程如記錄添加的設計流程,不再贅述。相關知識與技能在本任務中,需要用到新的知識點:集合和泛型集合。3-4-1 泛型集合的定義與使用 集合好比容器,將一系列相似的對象組合在一起,集合中包含的對象稱為集合元 素。 .NET 中 , 集合 可分為 泛型集 合類 和非泛 型集合 類。 泛 型集 合類一 般位于 system.Collections.Generic 命名空間,非泛型集合類位于 System.Collections 命名空間,除此 之外,在 System.Collection. Specialized 命名空間中也包含了一些有用的集合類。1、非泛型集合 System.Collections

36、 命名空間下的.NET 非泛型集合類如下所示: System.Collection s.ArrayList :數(shù)組集合類System.Collections.BitArray :布爾集合類System.Collectio ns.Queue :隊歹 USystem.Collections.Stack:堆棧System.Collectio ns.Hashtable:哈希表System.Collecti on s.SortedList :排序集合類非泛型集合操作直觀,但由于集合中的對象是 Object 類型,如果集合中需要存放其它 類型的對象,則每次使用都必須進行繁瑣的類型轉換。因此,一般情況下,泛

37、型集合用的 比較多。2、泛型泛型就好比 Word 中的模板, 在定義 Word 模板時, 對具體編輯哪種類型的文檔是未知 的。 在 .NET中,泛型提供了類、結構、接口和方法的模板,定義泛型時的具體類型也是未 知的。例如,可以定義一個泛型類:class FX private T x。public FX() public FX(T x) this .x = x。 public T num() return x。此類表示一種模板,此模板中包含一個字段, 2 個構造函數(shù),和一個返回字段值的方 法,字段和方法的類型都是未知的。實例化此類可以是:FX f=new FX(3)。 表示用整型來實例化,并為字

38、段賦值為3。也可以這樣實例化:FX g = new FX(3.4)。 表示用實型進行實例化,并為字段賦值3.4 。所以,實例化泛型類必須在 內填上確定的類型,表示此模板目前作用于什么類型。3、泛型集合在 3 層結構的應用程序中,用到的泛型集合 System.Collections.Generic 命名空間下 的 .NET 泛型集合類主要是: System.Collections.Generic .List 類。查閱 msdn 的 List(Of T) 類, 對泛型集合進行定義和使用。(1)定義ListvT 集合名=new ListvT ()。表示定義 1 個 List 類的泛型集合,集合中對象

39、的類型為T。其中的 T 就是所要使用的類型,既可以是簡單類型,如string、int,也可以是用戶自定義類型如 course 類。(2)屬性Cou nt:獲取集合中實際包含的元素數(shù)Item :獲取或設置指定索引處的元素(3)方法Add(T item):將對象添加到 List 的結尾處。例如以下代碼:class Personprivate string name 。private int age 。public Person() public Person(string name, int age)=name。 this.age=age。 privatevoid button1

40、_Click( object sender, EventArgs e)List pList = newList ()。string name = textBox1.Text.Trim()。intage = Convert .ToInt32(textBox2.Text.Trim()。Person p = newPerson(name,age)。pList.Add(p)。dataGridView1.DataSource = pList。定義了 1 個 Person 類的泛型列表后,可以將 Person 類的對象放入此集合,并作為 數(shù)據(jù)網格的數(shù)據(jù)源。3-4-2 數(shù)據(jù)訪問層的方法設計 在上個任務的 C

41、ourseAccess 類中,為了實現(xiàn)瀏覽,需要添加的方法有: 1、獲取此表的所有記錄 方法名: GetXXList 形參:無 返回值:此表實體類的泛型集合 方法內代碼設計:(1)設計語句 select * from 表(2)定義此表實體類的泛型集合對象(3)利用 using 語句,調用 DBHelper 類,生成一個 datareader 對象(4)利用 Read()方法讀此 datareader 對象的所有行,每讀 1 行,取到此表實體類的對象中,添加入泛型集合,返回泛型集合對象。 應用場合:取整個表的所有記錄,作為數(shù)據(jù)展示控件(如數(shù)據(jù)網格)的數(shù)據(jù)源。3-4-3 業(yè)務邏輯的方法設計在上個任

42、務的 CourseBiz 類中,為了實現(xiàn)瀏覽,需要添加的方法有:1 、課程瀏覽 方法名: GetXXList形參:無返回值: void方法內代碼設計:(1)調用 CourseAccess 類對象的 GetCourseList ()方法,返回課程泛型集合類。3-4-3 界面層代碼的重構 課程瀏覽時,界面上主要的功能如下:1、 窗體加載時,代碼放在LOAD 事件中,調用業(yè)務邏輯類對象的GetCourseList()方法,實現(xiàn)瀏覽。2、添加或刪除記錄成功后, 在原有代碼中添加, 調用業(yè)務邏輯類對象的 GetCourseList ()方法,實現(xiàn)瀏覽。任務的設計思路1、在 DAL 工程中 CourseA

43、ccess 類,添加瀏覽課程的方法。2、在 BLL 工程中 CourseBiz 類,添加課程瀏覽相關方法。3、 優(yōu)化界面層代碼,調用業(yè)務邏輯層類的方法,在3 個場合實現(xiàn)瀏覽。任務的實施1、在 CourseAccess 類中,添加如下方法:/獲取課程列表/ public List GetCourseList()string strSql = string .Format( select * from course)。List list= newList ()。using ( OleDbDataReader dr = DBHelper.GetReader(strSql)while (dr.Read()public List GetCourseList()return course

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論