当前位置:编程学习 > VB >>

剪不断,理不乱——三层架构之抽象工厂加反射

 三层架构前面已经介绍过了,浅谈三层架构。本篇文章主要介绍三层架构中加入抽象工厂和反射加配置文件。以机房收费系统的登录为例。
        首先对机房收费系统进行分层,分为三层表示层,业务逻辑层,数据访问层。为了降低系统的耦合性,符合系统的开放封闭原则又加入了外观模式和抽象工厂模式。下面是我画的包图。
        
        在画包图的过程中也是在对系统的认识一步步加深的,也是在不断的修改过程中逐步完善起来的。 图中很明白的体现出了各层之间的引用关系。
        在U层和B层之间加入了外观模式,使U层和B层分离,为系统提供一个简单的接口,使得耦合性大大降低,减少了它们之间的依赖.
       在B层和D层之间加入了抽象工厂模式,使得B层和D层分离,通过抽象工厂加反射返回一个接口,D层去实现接口,体现了D层的可移植性.
      
      下面画的是机房收费系统登录的时序图:
 
 
U层负责数据的输入,代码如下
[vb 
<span style="font-family:Microsoft YaHei;font-size:18px;">Public Class frmLogin  
  
    '登录代码  
    Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click  
  
        '把用户名和密码放到一个实体中  
        Dim user As New Entity.UserInfo  
        user.userName = txtUserName.Text  
        user.passWord = txtPassWord.Text  
  
        Dim loginUI As New Facade.LoginFAC  
        Dim strResult As String  
        strResult = loginUI.login(user)  
  
        '用户名和密码验证的几种情况  
        Select Case strResult  
  
            Case "此用户不存在"  
                MsgBox("此用户不存在,请重新输入用户名!")  
                txtUserName.Focus()  
                txtUserName.SelectAll()  
  
            Case "密码不正确"  
                MsgBox("密码不正确,请重新输入密码!")  
                txtPassWord.Focus()  
                txtPassWord.SelectAll()  
  
            Case "此用户已经在线"  
                MsgBox("该用户已在线", "警告")  
  
            Case "登录成功"  
                frmMain.Show()  
                'Me.Close()  
  
        End Select  
    End Sub  
  
    '退出  
    Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click  
        End  
    End Sub  
End Class</span>  
 
外观层负责登录时验证用户名和密码是否合法
[vb]  
<span style="font-family:Microsoft YaHei;font-size:18px;">Imports BLL  
Public Class LoginFAC  
  
    Public Function login(ByVal user As Entity.UserInfo) As String  
        Dim ConfirmUserBll As New BLL.ConfirmUser  
  
        '调用B层的方法验证用户名和密码是否存在  
        If Not ConfirmUserBll.IsExists(user) Then  
  
            Return "此用户不存在"  
        Else  
            If Not ConfirmUserBll.ConfirmPwd(user) Then  
                Return "密码不正确"  
            Else  
                Return "登录成功"  
  
            End If  
        End If  
  
    End Function  
  
End Class</span>  
 
B层负责逻辑处理,用户名和密码的验证逻辑
[vb]  
<span style="font-family:Microsoft YaHei;font-size:18px;">Imports Factory  
Imports IDAL  
  
'验证用户  
Public Class ConfirmUser  
  
    '用户名存在不存在  
    Public Function IsExists(ByVal user As Entity.UserInfo) As Boolean  
        Dim Iuser As IDAL.IUserInfo  
  
        Dim factory As New Factory.DBFactory  
        'factory = DBFactory.GetIstance  
  
        '调用工厂的方法创建出一个接口  
        Iuser = factory.CreateUserDAO()  
        If Iuser.QueryUserInfo(user).userName = "" Then  
            Return False  
        Else  
            Return True  
        End If  
  
  
  
    End Function  
  
    '验证密码正确不正确  
    Public Function ConfirmPwd(ByVal user As Entity.UserInfo) As Boolean  
        Dim Iuser As IDAL.IUserInfo  
        Dim factory As New Factory.DBFactory  
        'factory = DBFactory.GetIstance  
  
        Iuser = factory.CreateUserDAO  
  
        If Iuser.QueryUserInfo(user).passWord = "" Then  
            Return False  
        Else  
            Return True  
  
        End If  
    End Function  
End Class  
</span>  
 
补充:软件开发 , Vb ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,