java三层架构项目事例_三层架构实例
一、概要
在我的上一篇博客中,我們談了談分層,到底為什么分層(http://blog.csdn.net/shan9liang/article/details/6836300)
這篇博客,準(zhǔn)備用一個(gè)小Demo來介紹應(yīng)該實(shí)現(xiàn)三層架構(gòu)。三層架構(gòu)只是分層的一種經(jīng)典形式,到底分幾層,要依具體情況而定,考慮到系統(tǒng)的復(fù)雜程度,和后期的可維護(hù)性,完全可以分四層,五層,甚至六層,七層。
三層架構(gòu)(3-tierapplication),通常意義上的三層架構(gòu)就是將整個(gè)業(yè)務(wù)應(yīng)用劃分為:表現(xiàn)層(UI)、業(yè)務(wù)邏輯層(BLL)、數(shù)據(jù)訪問層(DAL)。區(qū)分層次的目的即為了“高內(nèi)聚,低耦合”的思想(《百度百科》)
二、DEMO
1、實(shí)現(xiàn)語言:VB.NET
2、需求:《學(xué)校機(jī)房收費(fèi)系統(tǒng)》中的一個(gè)功能:操作員為學(xué)生注冊(cè)機(jī)房上機(jī)卡。
3、用例圖:
4、三層架構(gòu)下的包圖:
注:Entity中放的都是實(shí)體類,即由數(shù)據(jù)庫中的表抽象出來的類。實(shí)體類主要作為數(shù)據(jù)的載體,在各個(gè)層之間被傳遞。
我們現(xiàn)在要做的就是對(duì)用例圖中所示的這個(gè)功能進(jìn)行抽象,即分別在UI,BLL,DAL三層抽象類。
數(shù)據(jù)訪問層DAL:數(shù)據(jù)庫中的一張表對(duì)應(yīng)DAL層的一個(gè)類,所以這里要有一個(gè)dal_DealStudentInfo類,它必然有一個(gè)方法AddRecord,用于向數(shù)據(jù)庫中添加數(shù)據(jù)。這個(gè)方法的參數(shù)便是studentInfo這張表映射出的一個(gè)實(shí)體類的一個(gè)實(shí)例,方法中包含了一些SQL語句。IsExist是驗(yàn)證數(shù)據(jù)有效性,這里主要是檢驗(yàn)用戶是否已經(jīng)存在。圖示:
關(guān)鍵代碼如下:
Public Class dal_DealStudentInfo
Public Function AddRecord(ByVal RecInfo As Student) As Boolean
'……
'連接數(shù)據(jù)庫
'……
'……
Try
'SQL語句向數(shù)據(jù)庫中寫入數(shù)據(jù)
'……
Return True
Catch
Return False
Finally
'關(guān)閉數(shù)據(jù)庫
End Try
End Function
Public Function IsExist() As Boolean
'查詢數(shù)據(jù)庫,如果存在該卡,則返回True,不存在則返回false
If '存在
Return True
Else
Return False
End If
End Function
End Class
業(yè)務(wù)邏輯層BLL:這里會(huì)有一個(gè)類bll_ControlStudent與DAL層中的dal_DealStudentInfo類對(duì)應(yīng),調(diào)用dal_DealStudentInfo的AddRecord方法,這個(gè)方法傳遞的參數(shù)就是UI層傳遞過來的studentInfo實(shí)體類的一個(gè)實(shí)例。如果需要驗(yàn)證輸入合法性,也放在bll_ControlStudent中,并與dal_DealStudentInfo中的方法相對(duì)應(yīng),可以單獨(dú)用一個(gè)方法,也可以集成到AddStudent中,我這里因?yàn)橹皇沁M(jìn)行了簡單的判斷,就把它放到了AddStudent。
圖示:
關(guān)鍵代碼如下:
Public Class bll_ControlStudent
Public Function AddStudent(ByVal student As Student) As String
Dim DealStudent As New dal_DealStudentInfo
If Not (DealStudent.IsExist) Then
If DealStudent.AddRecord(student) Then
Return "注冊(cè)成功"
Else
Return "注冊(cè)失敗"
End If
Else
Return "該卡已經(jīng)存在,請(qǐng)重新輸入卡號(hào)"
End If
End Function
End Class
表現(xiàn)層UI:這里肯定有一個(gè)窗體類frmRegister。上面有一些控件,這里我簡要畫了一個(gè)界面:
在按鈕確定的事件下,我們需要實(shí)例化studentInfo這張表映射出的一個(gè)實(shí)體類,把這個(gè)對(duì)象作為一個(gè)參數(shù),傳遞給BLL層中的類bll_ControlStudent。
關(guān)鍵代碼:
Public Class frmRegister
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
Dim strMsg As String
Dim student As New Student(Trim(txtCardNo.Text), Trim(txtStuName.Text), Trim(txtStuNo.Text), Trim(txtDepartment.Text), Val(txtMoney.Text))
Dim ControlStudent As New bll_ControlStudent
strMsg = ControlStudent.AddStudent(student)
MessageBox.Show(strMsg)
End Sub
Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
End Class
4、總體的關(guān)系類圖:
五、總結(jié)
本文主要通過一個(gè)小demo簡要實(shí)現(xiàn)了三層架構(gòu),我們看到三層架構(gòu)的主要特點(diǎn):UI調(diào)用BLL中類的方法,即UI知道BLL的方法,但不知道方法實(shí)現(xiàn)的細(xì)節(jié),而BLL層并不知道UI的存在.同樣BLL層調(diào)用DAL,而DAL也不知道BLL的存在。三者中任何一者發(fā)生變化都不會(huì)影響其他倆者的正常工作,只對(duì)變化者進(jìn)行重新調(diào)整即可。三層把Entity實(shí)體類的實(shí)例作為參數(shù)來傳遞.
總之,表示層只提供軟件系統(tǒng)與用戶交互的接口;業(yè)務(wù)邏輯層是界面層和數(shù)據(jù)訪問層之間的橋梁,負(fù)責(zé)數(shù)據(jù)處理和傳遞;數(shù)據(jù)訪問層只負(fù)責(zé)數(shù)據(jù)的存取工作。
總結(jié)
以上是生活随笔為你收集整理的java三层架构项目事例_三层架构实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特斯拉为北美 Model S / X 准
- 下一篇: java面向对象各章节教程_第二部分ja