zoukankan      html  css  js  c++  java
  • VB.NET版机房收费系统---外观层怎样写

           外观设计模式。《大话设计模式》第103页具体解说,不记得这块知识的小伙伴能够翻阅翻阅,看过设计模式,敲过书上的样例,仅仅是学习的第一步,接着,假设在我们的项目中灵活应用,把设计模式用出花儿来。才是王道,有人总说,纸上得来终觉浅,绝知此事要躬行,但是真到了躬行的时候,总是行不通,语言倒只是来,设计模式是C#语言的,机房收费是VB.NET版本号的。书上的模式和机房联系不起来。不知道怎么应用。没办法,憋呗。看博客。问人,上网查资料,就这样,憋出一个外观,虽不太完美。但却异常宝贵,由于那是我纠结好长时间从尘埃里开出的花,就外观模式的应用在这里小小的总结一下。


           就机房收费系统中的一个注冊功能来说,着手之前,我们须要做下面思考工作:
           a、从学生表里查询。是否存在该学号;
           b、从卡表里查询。是否存在该卡号;
           c、在学生表里插入一条记录。
           d、在卡表里插入一条记录。
           e、在充值表里插入一条记录;
           在外观层我的代码例如以下:(该博文,重点阐述外观层的写法,其她层再此不再赘述)
           

    <span style="font-size:18px;">'**********************************************
    '文 件 名: RegisterFacade
    '命名空间: Facade
    '内    容: 从卡表和学生表里面查询是否存在该卡号和学号,存在。给出提示,不存在。注冊成功之后,一次向卡表,学生表和充值表中写入相关信息
    '功    能: 注冊
    '文件关系:
    '作    者:丁国华
    '小    组:宝贝计划
    '生成日期: 2014/7/17 15:06:56
    '版本:V2.0
    '改动日志:
    '版权说明:
    '**********************************************
    
    Public Class RegisterFacade
        '/// <summary>
        '/// depiction:<从学生表里面查询是否存在该学号>
        '/// </summary>
        '/// <param name="<enStudent>"><学生实体></param>
        '/// <returns>
        '///<返回一个学生实体的集合>
        '/// </returns>
        Public Function QueryStudentNo(ByVal studentNo As String) As List(Of Entity.StudentEntity)
            Dim studentBLL As New BLL.T_StudentBLL
            Dim myList As List(Of Entity.StudentEntity)
    
            myList = studentBLL.QueryStudentNo(studentNo)
            If myList.Count > 0 Then
                Throw New Exception("该学号已经存在")
            Else
                Return myList
            End If
        End Function
        '/// <summary>
        '/// depiction:<从卡表里面查询是否存在该卡号>
        '/// </summary>
        '/// <param name="<enCard>"><卡实体></param>
        '/// <returns>
        '///<返回一个卡实体的集合>
        '/// </returns>
        Public Function QueryCardNo(ByVal cardNo As String) As List(Of Entity.CardEntity)
            Dim cardBLL As New BLL.T_CardBLL
            Dim myList As List(Of Entity.CardEntity)
    
            myList = cardBLL.QueryCardNo(CardNo)
            If myList.Count > 0 Then
                Throw New Exception("该卡号已经存在")
            Else
                Return myList
            End If
        End Function
    
        '/// <summary>
        '/// depiction:<插入一条学生信息>
        '/// </summary>
        '/// <param name="<enStudent>"><学生实体></param>
        '/// <returns>
        '///<返回布尔值>
        '/// </returns>
        Public Function InsertStudent(ByVal enStudent As Entity.StudentEntity) As Boolean
            Dim StudentBLL As New BLL.T_StudentBLL
            Dim flag As Boolean
    
            flag = StudentBLL.InsertStudent(enStudent)
            Return flag
        End Function
        '/// <summary>
        '/// depiction:<插入一条卡信息>
        '/// </summary>
        '/// <param name="<enCard>"><卡实体></param>
        '/// <returns>
        '///<返回布尔值>
        '/// </returns>
        Public Function InsertCard(ByVal enCard As Entity.CardEntity) As Boolean
            Dim CardBLL As New BLL.T_CardBLL
            Dim flag As Boolean
    
            flag = CardBLL.InsertCard(enCard)
            Return flag
        End Function
       
        '/// <summary>
        '/// depiction:<插入一条充值信息>
        '/// </summary>
        '/// <param name="<enRecharge>"><充值实体></param>
        '/// <returns>
        '///<返回布尔值>
        '/// </returns>
        Public Function InsertRecharge(ByVal enRecharge As Entity.RechargeEntity) As Boolean
            Dim RechargeBLL As New BLL.T_RechargeBLL
            Dim Flag As Boolean
    
            Flag = RechargeBLL.InsertRecharge(enRecharge)
            Return Flag
    
        End Function
    
    End Class
    </span>
           接着,我们再来看下一个充值的功能,着手之前,我们须要做一下思考工作:
           a、从卡表里面查询,是否存在该卡号。
           b、在充值表里面插入一条充值记录;
           c、更新卡表中的剩余金额

          和上述的注冊功能相比較,两个功能都须要从卡表里面查询和向充值表里面插入一条记录。所以充值这个功能,她的接口层(IDAL),D层(DAL),Factory-工厂层,BLL-业务逻辑层,她的代码写法和上述的注冊功能的写法都是一样的,我们就不须要在写一次,直接调用就能够了。但是外观层要怎么写呢,写着写着就写不下去了。按着曾经的写法,仅仅须要在外观层写一个更新卡表中剩余金额的方法即可了,从卡表中查询和在充值表中插入一条充值记录,仅仅须要调用注冊的外观就能够了,但是,这样写的话,U层就调用了两个外观层。那还是外观层么?显然不是。看人程杰老师的大话设计模式中,外观的写法是把小的方法汇总成一个总的方法,写在一个大的方法里面,那充值的外观究竟怎样写呢?例如以下:

            

    <span style="font-size:18px;">'**********************************************
    '文 件 名: RechargeFacade
    '命名空间: Facade
    '内    容:
    '功    能:
    '文件关系:
    '作    者:丁国华
    '小    组:宝贝计划
    '生成日期: 2014/7/18 22:18:04
    '版本:V2.0
    '改动日志:
    '版权说明:
    '**********************************************
    
    Public Class RechargeFacade
        '/// <summary>
        '/// depiction:<查询卡号>
        '/// </summary>
        '/// <param name="<enCard>"><卡号></param>
        '/// <returns>
        '///<返回集合>
        '/// </returns>
        Public Function QueryCard(ByVal cardNo As String) As List(Of Entity.CardEntity)
            Dim cardbll As New BLL.T_CardBLL
            Dim mylist As List(Of Entity.CardEntity)
    
            mylist = cardbll.QueryCardNo(cardNo)
            If mylist.Count = 0 Then
                Throw New Exception("该卡号不存在")
            Else
                Return mylist
            End If
    
        End Function
    
        '/// <summary>
        '/// depiction:<须要向卡表中插入一条记录,更新卡表中的剩余金额。我们把这两个写成一个方法,由于都须要返回一个布尔值>
        '/// </summary>
        '/// <param name="<enCard>"><卡号></param>
        '/// <returns>
        '///<返回集合>
        '/// </returns>
        Public Function Recharge(ByVal enCard As Entity.CardEntity, ByVal enRecharge As Entity.RechargeEntity) As Boolean
            Dim CardBLL As New BLL.T_CardBLL
            Dim RechargeBLL As New BLL.T_RechargeBLL
            Dim Flag(2) As Boolean
    
            Flag(0) = RechargeBLL.InsertRecharge(enRecharge)
            Flag(1) = CardBLL.UpdateCard(enCard)
    
    
            If Flag(0) And Flag(1) Then
                Return Flag(0)
            Else
                Return False
            End If
        End Function
    End Class
    </span>
            小伙伴肯定有疑问,上面注冊的外观层不是仍然有两个方法?简单。解释一下,由于,查询卡号的时候。我们须要返回一个卡表的实体。然后从里面找到曾经的剩余金额,然后还要加上充值的金额,形成一个新的剩余金额,更新的时候才干有一个卡表实体,以下recharge的那个方我们的返回值boolean。true为充值成功,一个方法不可能有两个返回值,所以写成两个方法,总的来说就是详细外观层有几个方法,是由返回值定的。第二遍机房收费系统,未完,待续......


  • 相关阅读:
    安防视频云服务EasyCVR视频上云网关如何通过wireshark将发送的rtp流数据保存成文件?
    安防视频监控系统视频上云解决方案EasyCVR语音转发功能音频数据打包发送流程介绍
    安防视频监控系统视频上云解决方案EasyCVR音频基础知识介绍
    如何通过RTSP协议视频平台EasyNVR建立一套外网可访问的4S店远程监控系统?
    IP摄像机RTSP协议视频平台EasyNVR点击程序启动后闪退问题排查及解决
    5G时代RTC技术是直播互动的最终选择,EasyRTC视频会议系统将赋能VR/电商直播等更多新场景
    视频会议软件EasyRTC-SFU之mediasoup-demo在 Windows上的编译安装
    视频会议软件/音视频通话软件EasyRTC-SFU开发中如何使用TortoiseGit将代码推送到两个代码仓库?
    SFU架构的云视频会议系统如何取代硬件视频会议系统,成为5G时代的视频会议新宠?
    云架构视频会议系统EasyRTC企业远程会议MCU版与SFU版在行业应用场景上有什么区别?
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6731840.html
Copyright © 2011-2022 走看看