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版机房收费系统—数据库设计
之前第一遍机房收费的时候,用的数据库是别人的.认知也仅仅能建立在别人的基础上,等自考中<数据库系统原理>这本书学完了之后,再去看曾经的数据库,发现数据库真的还须要进一步的优化.以下是我设计 ...
随机推荐
- [POJ2337]Catenyms
题目大意: 定义一个catenym是一对单词,满足第一个单词的末尾字符与第二个单词的开头字符相等. 定义复合catenym是一些单词,满足第i个单词的末尾字符与第i+1个单词的开头字符相等. 给你n个 ...
- Codeforces Round #349 (Div. 1) B. World Tour 暴力最短路
B. World Tour 题目连接: http://www.codeforces.com/contest/666/problem/B Description A famous sculptor Ci ...
- PAT甲级1131. Subway Map
PAT甲级1131. Subway Map 题意: 在大城市,地铁系统对访客总是看起来很复杂.给你一些感觉,下图显示了北京地铁的地图.现在你应该帮助人们掌握你的电脑技能!鉴于您的用户的起始位置,您的任 ...
- 小程序swiper 快速滑动闪屏
bindchange: function(e){ if(e.detail.source == "touch") { this.setData({ current: current ...
- win7 系统盘怎样瘦身! 可整理出4-5G。
1.移走虚拟内存文件到非系统盘 大家都知道,为了加快系统的执行,Windows提供了虚拟内存机制,而在Windows7中,默认是开启这项功能的,并且虚拟内存文件在系统盘.比方一台2G内存的机器,虚拟内 ...
- ob_start()、ob_end_flush和ob_end_clean()多级缓冲
ob_start() 和 ob_end_flush() 是一对很好的搭档,可以实现对输出的控制.当成一对出现理解起来就没什么问题,但是当他们两个各自出现次数增加时,就比较难理解了. <?php ...
- 报错: LINQ to Entities 不识别方法“Int32 Parse(System.String)
断点调试发现报错的语句为: public ActionResult SomeMethod(string someId) { var temp = SomeService.LoadEntities(a ...
- firedac二进制序列和JSON序列的对比
firedac二进制序列和JSON序列的对比 以同样大小的一个数据集的数据,作为测试的数据. 以JSON序列后的数据体积是4958字节. 以二进制序列后的数据体积是3044字节. 4958/3044= ...
- oracle extract函数
oracle Extract 函数 //oracle中extract()函数从oracle 9i中引入,用于从一个date或者interval类型中截取到特定的部分 //语法如下: EXTRA ...
- javascript级联菜单,数据从数据库中获取
1.html代码: <%@ page contentType="text/html; charset=gb2312" %> <%@ page import=&qu ...