三层架构实例

一、概要
在我的上一篇博客中,我们谈了谈分层,到底为什么分层(http://blog.csdn.net/shan9liang/article/details/6836300
这篇博客,准备用一个小Demo来介绍应该实现三层架构。三层架构只是分层的一种经典形式,到底分几层,要依具体情况而定,考虑到系统的复杂程度,和后期的可维护性,完全可以分四层,五层,甚至六层,七层。
 
三层架构(3-tierapplication),通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想(《百度百科》)
 
二、DEMO
1、实现语言:VB.NET
2、需求:《学校机房收费系统》中的一个功能:操作员为学生注册机房上机卡。
3、用例图:


4、三层架构下的包图:


注:Entity中放的都是实体类,即由数据库中的表抽象出来的类。实体类主要作为数据的载体,在各个层之间被传递。
 
我们现在要做的就是对用例图中所示的这个功能进行抽象,即分别在UI,BLL,DAL三层抽象类。
 
数据访问层DAL:数据库中的一张表对应DAL层的一个类,所以这里要有一个dal_DealStudentInfo类,它必然有一个方法AddRecord,用于向数据库中添加数据。这个方法的参数便是studentInfo这张表映射出的一个实体类的一个实例,方法中包含了一些SQL语句。IsExist是验证数据有效性,这里主要是检验用户是否已经存在。图示:



关键代码如下:

  1. Public Class dal_DealStudentInfo  
  2.     Public Function AddRecord(ByVal RecInfo As Student) As Boolean  
  3.         '……  
  4.         '连接数据库  
  5.         '……  
  6.   
  7.         '……  
  8.         Try  
  9.             'SQL语句向数据库中写入数据  
  10.             '……  
  11.             Return True  
  12.         Catch  
  13.             Return False  
  14.         Finally  
  15.             '关闭数据库  
  16.         End Try  
  17.   
  18.     End Function  
  19.   
  20.     Public Function IsExist() As Boolean  
  21.         '查询数据库,如果存在该卡,则返回True,不存在则返回false  
  22.         If  '存在  
  23.             Return True  
  24.         Else  
  25.             Return False  
  26.         End If  
  27.   
  28.     End Function  
  29. End Class  

业务逻辑层BLL:这里会有一个类bll_ControlStudent与DAL层中的dal_DealStudentInfo类对应,调用dal_DealStudentInfo的AddRecord方法,这个方法传递的参数就是UI层传递过来的studentInfo实体类的一个实例。如果需要验证输入合法性,也放在bll_ControlStudent中,并与dal_DealStudentInfo中的方法相对应,可以单独用一个方法,也可以集成到AddStudent中,我这里因为只是进行了简单的判断,就把它放到了AddStudent。
图示:




关键代码如下:

  1. Public Class bll_ControlStudent  
  2.   
  3.     Public Function AddStudent(ByVal student As Student) As String  
  4.   
  5.   
  6.         Dim DealStudent As New dal_DealStudentInfo  
  7.         If Not (DealStudent.IsExist) Then  
  8.             If DealStudent.AddRecord(student) Then  
  9.                 Return "注册成功"  
  10.             Else  
  11.                 Return "注册失败"  
  12.             End If  
  13.         Else  
  14.             Return "该卡已经存在,请重新输入卡号"  
  15.         End If  
  16.     End Function  
  17. End Class  


表现层 UI :这里肯定有一个窗体类 frmR egister 。上面有一些控件,这里我简要画了一个界面:


在按钮确定的事件下,我们需要实例化studentInfo这张表映射出的一个实体类,把这个对象作为一个参数,传递给BLL层中的类bll_ControlStudent。
关键代码:

  1. Public Class frmRegister  
  2.   
  3.     Private Sub btnOK_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles btnOK.Click  
  4.         Dim strMsg As String  
  5.   
  6.         Dim student As New Student(Trim(txtCardNo.Text), Trim(txtStuName.Text), Trim(txtStuNo.Text), Trim(txtDepartment.Text), Val(txtMoney.Text))  
  7.         Dim ControlStudent As New bll_ControlStudent  
  8.   
  9.         strMsg = ControlStudent.AddStudent(student)  
  10.         MessageBox.Show(strMsg)  
  11.   
  12.     End Sub  
  13.   
  14.     Private Sub btnCancel_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles btnCancel.Click  
  15.         Me.Close()  
  16.     End Sub  
  17. End Class  

4 、总体的关系类图:


五、总结
本文主要通过一个小demo简要实现了三层架构,我们看到三层架构的主要特点:UI调用BLL中类的方法,即UI知道BLL的方法,但不知道方法实现的细节,而BLL层并不知道UI的存在.同样BLL层调用DAL,而DAL也不知道BLL的存在。三者中任何一者发生变化都不会影响其他俩者的正常工作,只对变化者进行重新调整即可。三层把Entity实体类的实例作为参数来传递.
总之,表示层只提供软件系统与用户交互的接口;业务逻辑层是界面层和数据访问层之间的桥梁,负责数据处理和传递;数据访问层只负责数据的存取工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值