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为充值成功,一个方法不可能有两个返回值,所以写成两个方法,总的来说就是具体外观层有几个方法,是由返回值定的。第二遍机房收费系统,未完,待续......
VB.NET版机房收费系统---外观层如何写的更多相关文章
- VB.NET版机房收费系统---外观层怎样写
外观设计模式.<大话设计模式>第103页具体解说,不记得这块知识的小伙伴能够翻阅翻阅,看过设计模式,敲过书上的样例,仅仅是学习的第一步,接着,假设在我们的项目中灵活应用,把设计模式用出花儿 ...
- VB.NET版机房收费系统---异常处理
异常处理,英文名为Exceptional Handling, 那时年少,还记得那年一起学习过的VB6.0的时候,常常使用ONError的错误语句.与传统VB6.0中的OnError语句相比.NET平台 ...
- VB.net版机房收费系统——结账功能实现(调错与优化)
调错部分 上一篇博客<VB.net版机房收费系统--结账功能实现(代码部分>说的是结账功能的实现,亮出了代码.是在为这篇博客做铺垫.尽管结账功能代码是借鉴的巨人的博客.可是自己比着葫芦画瓢 ...
- VB.NET版机房收费系统---导出Excel表格
datagridview,翻译成中文的意思是数据表格显示,使用DataGridView控件,能够显示和编辑来自不同类型的数据源的表格,将数据绑定到DataGridView控件很easy和直观,大多数情 ...
- VB.NET版机房收费系统---七仙女之系统登录
VB.NET第一版机房收费系统,告一段落,验收的时候.问题也是大大的存在,没实用上设计模式,什么触发器.存储过程,都没实用上.看看其她小伙伴的,七层实现登录?那是什么东东,相比較我的三层而言,多了两倍 ...
- VB.NET版机房收费系统---报表
报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据 ...
- VB.NET版机房收费系统---组合查询
查询的意思就是查找,寻找,指在某一个或几个地方找出自己所要的信息,假如我想搜索一下我自己写的博客,名字叫做初雪之恋,我在百度的搜索框中输入丁国华三个字,会有怎样的惊喜等着我? 啊哦,这个信息并不是我想 ...
- vb.net版机房收费系统——教你七层架构(三)—外观模式
上次我们看到了D层是如何运作的,如今.我简单演示一下我的外观和B层是如何和U层和D层打交道的. 首先我跟大家说的是我的外观是依照界面功能划分的,粒度有点小,大家在做的时候,记得外观有几个即可了,可是不 ...
- VB.NET版机房收费系统—数据库设计
之前第一遍机房收费的时候,用的数据库是别人的.认知也仅仅能建立在别人的基础上,等自考中<数据库系统原理>这本书学完了之后,再去看曾经的数据库,发现数据库真的还须要进一步的优化.以下是我设计 ...
随机推荐
- Docker学习系列(二)Docker初体验
一.系统要求 Docker的安装,需要在CentOS 7.0+版本,内核至少3.10,64-bit uname --r [randy@randysun ~]$ uname --r -.el7.x86_ ...
- 渗透测试环境DVWA搭建
一.DVWA介绍 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供 ...
- 下篇:python的基本数据类型以及对应的常用方法(列表、元组、字典、集合)
为了日后便于查询,本文所涉及到的所有命令集合如下: python中的基本数据类型有数字.字符串.布尔值.列表.元组.字典.就像每一个职业有自己特定的技能,比如医生能看病,农民能种田,每种数据类型也有属 ...
- python环境搭建(python2和python3共存)
安装两个版本的意义 验证自己代码对版本的兼容性 网上下载的某些源码只能在python2或者python3中运行 安装过程记录 1.去python官网下载python的安装包, 下载完成后如下图所示 2 ...
- Go 语言环境安装
Go 语言支持以下系统: Linux FreeBSD Mac OS X(也称为 Darwin) Window 安装包下载地址为:https://golang.org/dl/. 各个系统对应的包名: 操 ...
- MySQL 连接的使用
MySQL 连接的使用 在前几章节中,我们已经学会了如果在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据. 本章节我们将向大家介绍如何使用 MySQL 的 JOIN ...
- 利用百度接口进行人脸识别并保存人脸jpg文件
利用百度接口进行人脸识别,根据返回的人脸location用opencv切割保存. # coding : UTF-8 from aip import AipFace import cv2 import ...
- “你什么意思”之基于RNN的语义槽填充(Pytorch实现)
1. 概况 1.1 任务 口语理解(Spoken Language Understanding, SLU)作为语音识别与自然语言处理之间的一个新兴领域,其目的是为了让计算机从用户的讲话中理解他们的意图 ...
- Android开发使用Java8新特性
Android 支持所有 Java 7 语言功能,以及一部分 Java 8 语言功能(具体因平台版本而异).本文介绍您可以使用的新语言功能.如何正确配置项目以使用这些功能,以及您可能遇到的任何已知问题 ...
- 用Codility测试你的编码能力
没有宏观的架构设计,没有特定的框架语言.在Codility提出的一些小问题上,用最纯粹的方式测试你最基本的编码能力. Codility第一课:算法复杂度 各种算法书的开篇大多是算法分析,而复杂度(co ...