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为充值成功,一个方法不可能有两个返回值,所以写成两个方法,总的来说就是具体外观层有几个方法,是由返回值定的。第二遍机房收费系统,未完,待续......

时间: 2024-08-22 14:43:05

VB.NET版机房收费系统---外观层如何写的相关文章

VB.NET版机房收费系统---异常处理

        异常处理,英文名为Exceptional Handling, 那时年少,还记得那年一起学习过的VB6.0的时候,常常使用ONError的错误语句.与传统VB6.0中的OnError语句相比.NET平台的异常处理机制更加灵活,而且使用更加方便.是代替日渐衰落的Error Code方法的新法,提供Error Code 所未能具体的优势.异常处理巧妙又不失完美的分离了接收和处理错误代码.这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解.         异常

VB.NET版机房收费系统---导出Excel表格

       datagridview,翻译成中文的意思是数据表格显示,使用DataGridView控件,可以显示和编辑来自不同类型的数据源的表格,将数据绑定到DataGridView控件非常简单和直观,大多数情况下,只需要设置DataSource属性即可,在绑定到包含多个列表或表的数据库源时,只需将DataMember属性设置为绑定的列表或表的字符串即可.机房收费系统多次用到数据表格的显示,并且导出为Excel表格,第一次机房收费系统是用VB版本的,她导出Excel的方法如下:        

VB.NET版机房收费系统---报表

       报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据.       比如:民间常常说的豆腐帐,就是卖豆腐的每天将自己的卖出的豆腐记在一个本子上,然后每月都要汇总算算,这种情况下,报表数据和报表格式是紧密结合在一起的,都在同一个本子上.数据也只能有一种几乎只有记帐的人才能理解的表现形式,且这种形式难于修改.      VB版机房收费系统的报表采用的

VB.NET版机房收费系统---七仙女之系统登录

        VB.NET第一版机房收费系统,告一段落,验收的时候,问题也是大大的存在,没有用上设计模式,什么触发器,存储过程,都没有用上,看看其她小伙伴的,七层实现登录?那是什么东东,相比较我的三层而言,多了两倍还加个一,通过查资料,看博客,憋了好几天,终于,憋出了一个七仙女---七层实现系统登录,七个女儿,各司其职,完美配合,衍生出众多美丽的故事.        从三层猛地跳到七层,有种穿越的感觉,说白了就是不会,又是想逃避的感觉,可是人生在世,有的事情不能随着自己的性子来,喜欢了就去做,

VB.NET版机房收费系统---组合查询

       查询的意思就是查找,寻找,指在某一个或几个地方找出自己所要的信息,假如我想搜索一下我自己写的博客,名字叫做初雪之恋,我在百度的搜索框中输入丁国华三个字,会有怎样的惊喜等着我?                            啊哦,这个信息并不是我想要的,于是我再搜,"丁国华 廊坊师范学院  csdn"搜索结果如下:                     很显然,这个还不是我想要的结果,我接着搜,"丁国华 廊坊师范学院 csdn 初雪之恋":  

VB.NET机房收费系统总结

     又一次机房收费系统,有一次总结,第一次是vb6,这次则采用VB.NET+设计模式+三层.     vb6的机房收费系统是面向过程开发,代码量大,不易维护,而这次的VB.NET则是面向对象的开发,代码量虽然没有减少反而增多,但是系统的结构变得灵活的多,可维护性增强了不少,采用了分层和设计模式,对象化了各个模块,复用率也大大提高了.     具体来说一下吧.在网上查了资料,简单了解了三层后,开始了我的三层之旅.先用EA画了3层的登录例子.下面是我的系统架构(包图):     当时一开始只有

机房收费系统(VB.NET)个人版总结

    重构版个人机房收费系统大概从暑假开学开始进行,花了不到一个半月的时间才完成,下面对我在重构过程中的一写理解.          1.系统设计一个很重要的目的就是重用,而要做到重用,低耦合是最有效的手段回顾一下我们C/S的整个学习过程,我们可以发现,从开始的VB版的机房收费系统,然后到现在VB.NET版,加设计模式.对系统进行分层,这个过程就是在对系统进行解耦.要解耦,首先就要进行抽象.把多次.重复用到的代码进行封装,其余的部分运用继承或者多态的思想,来进行使用.    在机房收费系统中我

小结:VB.NET机房收费系统个人版

      经过几天的缝缝补补,自己的个人版终于OK了,!也许是因为有第一次的机房收费系统的经验,这次做,感觉非常亲切.      在业务逻辑方面,沿袭以前的逻辑,做了一点升级,但是改动不大.      在数据库方面,感觉自己从一个小菜鸟在成长.第一次做机房的时候,在数据库方面,只会"insert ,delete ,update, select",基本上是靠着四句话完成整个机房收费系统的.但是,这次在做的时候,用上了视图和存储过程和一些数据库中的小技巧.在表结构上也比以前简练了不少,靠

机房收费系统的实现:VB中如何将MSHFlexGrid控件中的数据导出到Excel

机房收费系统中,好多查询的窗体都包含同一个功能:将数据库中查询到的数据显示在MSHFlexGrid控件中,然后再把MSHFlexGrid控件中的数据导出到Excel表格中. 虽然之前做过学生信息管理系统,不过并没有涉及到这个功能,因此记录于此,于己,回顾反思,于大家,分享学习. 方法一:在根目录中事先建立空的Excel表格 1.在与VB工程同一根目录中建立将要导入数据的Excel表格: 2.在VB事件中写代码: Private Sub cmdExport_Click() Dim i As Int