• vb.net版机房收费系统——教你七层架构(三)—外观模式


       上次我们看到了D层是如何运作的,如今。我简单演示一下我的外观和B层是如何和U层和D层打交道的。

      首先我跟大家说的是我的外观是依照界面功能划分的,粒度有点小,大家在做的时候,记得外观有几个即可了,可是不能没有,U层不能直接调用B层。这样就会添加U层和B层的耦合:


    '**************************
    '文 件 名:UserInfo_BLL
    '命名空间:BLL
    '内    容:
    '功    能:
    '文件关系:
    '作    者:邱慕夏
    '小    组:邱慕夏
    '生成日期:2014-06-07 17:36:40
    '版 本 号:V1.0.0.0
    '改动日志:
    '版权说明:
    '***************************
    Imports IDAL
    Public Class LoginBLL
        '/// <summary>
        '/// depiction:<查询User表是否存在该username和password>
        '/// </summary>
        '/// <param name="<參数名称>"><參数说明></param>
        '/// <returns>
        '///<要返回的是一个实体。entity>
        ' /// </returns>
        Public Function IsExits(ByVal user As Entity.LoginEntity, ByVal worklog As Entity.WorkLogEntity) As Boolean
            Dim IUser As IDAL.IUser
            Dim factory As New Factory.DataAccess
            Dim IWorklog As IDAL.IWorkLog
    
    
            IUser = factory.CreateUserInfo()
            IWorklog = factory.CreateWorkLog()
            Dim table As New DataTable
            Dim table1 As New DataTable
            table = IUser.User_Login(user)
            If table.Rows.Count = 0 Then
                Return False
            Else
                Entity.LoginEntity.UserLevel = table.Rows(0)(3)
                If IWorklog.SaveWorkLog(worklog) Then
                    Return True
                End If
                Return True
            End If
        End Function
    
    End Class
    

      B层不可是用来调用D层。并且我们经常会忘记的是:B层是用来做逻辑推断的

      看看外观层:


     

    '**************************
    '文 件 名:FLogin
    '命名空间:Facade
    '内    容:
    '功    能:
    '文件关系:
    '作    者:邱慕夏
    '小    组:邱慕夏
    '生成日期:2014-06-07 17:41:39
    '版 本 号:V1.0.0.0
    '改动日志:
    '版权说明:
    '***************************
    Imports BLL
    Public Class FA_Login
        '/// <summary>
        '/// depiction:<推断username和password是否有误>
        '/// </summary>
        '/// <param name="<參数名称>"><參数说明></param>
        '/// <returns>
        '///<返回了string类型,能够直接用在msgbox中>
        '/// </returns>
        Public Function FLogin(ByVal user As Entity.LoginEntity, worklog As Entity.WorkLogEntity) As String
            Dim ConfirmUserBll As New BLL.LoginBLL
            If ConfirmUserBll.IsExits(user, worklog) = False Then
                Return "输入有误"
            Else
                Return "登陆成功"
            End If
        End Function
    End Class

      事实上这里假设不是一个类。而是一个function就更加完美了。这里须要注意的是:外观是这样工作的:


      这个图在设计模式中非常不起眼,可是我仅仅记得这个图了。精髓所在。

      U层如何调用外观呢?

     

    '**************************
    '文 件 名:FrmLogin
    '命名空间:UI
    '内    容:
    '功    能:
    '文件关系:
    '作    者:邱慕夏
    '小    组:邱慕夏
    '生成日期:2014-06-07 16:53:46
    '版 本 号:V1.0.0.0
    '改动日志:
    '版权说明:
    '***************************
    Public Class FrmLogin
    
        Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
            Dim login As New Entity.LoginEntity
            Dim Flogin As New Facade.FA_Login
            Dim strResult As String
    
            login.UserID = txtUserID.Text.Trim()
            login.Password = TxtPassword.Text.Trim()
            Entity.LoginEntity.UserHead = txtUserID.Text.Trim()
    
            Dim worklog As New Entity.WorkLogEntity
            worklog.LoginDateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
            worklog.Status = "正在值班"
            worklog.UserID = Entity.LoginEntity.UserHead
            worklog.Computer = System.Net.Dns.GetHostName().ToString()
    
    
            strResult = Flogin.FLogin(login, worklog) '插入worklog数据
    
            Select Case strResult
                Case "输入有误"
                    MsgBox("输入有误,请又一次输入")
                    txtUserID.Focus()
                Case "登陆成功"
                    MsgBox("登陆成功")
                    Entity.WorkLogEntity.Login_DateTime = worklog.LoginDateTime
                    Me.Hide()
                    FrmMain.Show()
    
            End Select
    
    
        End Sub
    
        Private Sub btnQuit_Click(sender As Object, e As EventArgs) Handles btnQuit.Click
            Me.Close()
        End Sub
    End Class

      大家注意调用的时候,好好看看返回值就好了,facade层中返回的是string类型的。那么调用的时候,就这样:

      dim str as string =fa_login(login,worklog)

      这样即可了。U层select case str,就能够推断是否是成功了。

      关于外观层我就不错说了,外观的设计在:

      http://blog.csdn.net/qiumuxia0921/article/details/33738319

      写的非常明确,多说无益。

      


      

  • 相关阅读:
    一个最简单的使用Entity Framework 查询SQL 数据库的例子
    几何算法:点集合构造简单多边形
    序列和集合算法之序列比较
    .Net并行编程系列之三:创建带时间限制(Timeout)的异步任务并取得异步任务的结果
    枚举类型表示组合状态的抽象代数原理
    WCF开发实战系列五:创建WCF客户端程序
    WCF开发实战系列四:使用Windows服务发布WCF服务
    DQN(Deep Reiforcement Learning) 发展历程(五)
    DQN(Deep Reiforcement Learning) 发展历程(四)
    DQN(Deep Reiforcement Learning) 发展历程(三)
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6937817.html
Copyright © 2020-2023  润新知