上次我们看到了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

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

vb.net版机房收费系统——教你七层架构(三)—外观模式的更多相关文章

  1. vb.net版机房收费——助你学会七层架构(一)

    我自己写机房的时候,看非常多高人的博客,各种的借鉴,当初务必的纠结,如今整个机房敲完了,写这篇博客给大家一个总体上的.简单理解的七层,期望大家看完这篇文章之后,不会这个纠结了. 首先大家得看了我的上一 ...

  2. vb.net版机房收费——助你学会七层架构(二)反射+抽象工厂

    上一篇咱们做好了准备工作.数据库设计和Entity层,如今介绍 4.反射+抽象工厂 反射:用来消除Switch和if的,这里我尽量简单地介绍,以便大家理解.反射其有用起来非常easy.你就觉得他就是决 ...

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

    datagridview,翻译成中文的意思是数据表格显示,使用DataGridView控件,能够显示和编辑来自不同类型的数据源的表格,将数据绑定到DataGridView控件很easy和直观,大多数情 ...

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

    异常处理,英文名为Exceptional Handling, 那时年少,还记得那年一起学习过的VB6.0的时候,常常使用ONError的错误语句.与传统VB6.0中的OnError语句相比.NET平台 ...

  5. VB.net版机房收费系统——结账功能实现(调错与优化)

    调错部分 上一篇博客<VB.net版机房收费系统--结账功能实现(代码部分>说的是结账功能的实现,亮出了代码.是在为这篇博客做铺垫.尽管结账功能代码是借鉴的巨人的博客.可是自己比着葫芦画瓢 ...

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

    VB.NET第一版机房收费系统,告一段落,验收的时候.问题也是大大的存在,没实用上设计模式,什么触发器.存储过程,都没实用上.看看其她小伙伴的,七层实现登录?那是什么东东,相比較我的三层而言,多了两倍 ...

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

    报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据 ...

  8. VB.NET版机房收费系统---外观层如何写

    外观设计模式,<大话设计模式>第103页详细讲解,不记得这块知识的小伙伴可以翻阅翻阅,看过设计模式,敲过书上的例子,只是学习的第一步,接着,如果在我们的项目中灵活应用,把设计模式用出花儿来 ...

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

    查询的意思就是查找,寻找,指在某一个或几个地方找出自己所要的信息,假如我想搜索一下我自己写的博客,名字叫做初雪之恋,我在百度的搜索框中输入丁国华三个字,会有怎样的惊喜等着我? 啊哦,这个信息并不是我想 ...

随机推荐

  1. python中try…except的使用,处理程序异常

    通常情况下,在python中运行程序,多多少少会出现程序异常的问题,try……except能很好的解决程序中的异常.以下是其用法,在不同位置时进行什么样的工作和起到什么样的作用. try: 可能出现异 ...

  2. Django -聚合分组,FQ操作, cookie, session

    一. 聚合查询和分组 1. 聚合 aggregate(*args, **kwargs) 对一组数据进行统计分析, 通过对QuerySet进行计算, 返回一个聚合值得字典. arrgregate()中每 ...

  3. Java基础学习总结(48)——Java 文档注释

    Java只是三种注释方式.前两种分别是// 和/* */,第三种被称作说明注释,它以/** 开始,以 */结束. 说明注释允许你在程序中嵌入关于程序的信息.你可以使用javadoc工具软件来生成信息, ...

  4. 数据结构实现(四)二叉查找树java实现

    转载 http://www.cnblogs.com/CherishFX/p/4625382.html 二叉查找树的定义: 二叉查找树或者是一颗空树,或者是一颗具有以下特性的非空二叉树: 1. 若左子树 ...

  5. 改动购物项图书数量的Ajax处理

    一.cart.jsp页面 <%@ page language="java" contentType="text/html; charset=utf-8" ...

  6. apk去广告工具(利用apktool去除apk文件里的广告)

    基本知识 apk安装包的文件结构 以知名桌面软件“LauncherPro”为例,apk安装包文件目录: 文件目录如下: - META-INF - res - anim - color - drawab ...

  7. eclipse project文件夹下 删除不掉文件夹或者文件的解决的方法

    对于新手来说,有时操作失误就会导致eclipse文件夹中的某些子文件夹或者文件无法删除. 这种原因是,在project文件夹中(不是eclipse上显示的.是真实的物理磁盘上的)这个文件夹或者文件已经 ...

  8. HDU 4856 Tunnels(BFS+状压DP)

    HDU 4856 Tunnels 题目链接 题意:给定一些管道.然后管道之间走是不用时间的,陆地上有障碍.陆地上走一步花费时间1,求遍历全部管道须要的最短时间.每一个管道仅仅能走一次 思路:先BFS预 ...

  9. Linux内核中进程上下文和中断上下文的理解

    參考: http://www.embedu.org/Column/Column240.htm http://www.cnblogs.com/Anker/p/3269106.html 首先明白一个概念: ...

  10. PE文件结构(三) 输入表

    PE文件结构(三) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 输入表 输入函数,表示被程序调用可是它的代码不在程序代码中的,而在dll中的函数.对于这些函数.磁盘上的可执行文 ...