上次我们看到了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. [luogu]P3572 [POI2014]PTA-Little Bird(单调队列)

    P3572 [POI2014]PTA-Little Bird 题目描述 In the Byteotian Line Forest there are nn trees in a row. On top ...

  2. tring.Format格式化用法

    (数字保留两位小数,且每隔3为用逗号隔开): string.format("1f,.2d",333) -->333.00 string.format("1f,.2d ...

  3. linux中fork()函数详解(搬砖)

    一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...

  4. WinServer-AD操作常用powershell命令

    powershell 操作AD常用命令 查询AD中默认的密码策略 Get-ADDefaultDomainPasswordPolicy 查询AD中密码永不过期的用户 Get-ADUser -Filter ...

  5. C#-逆变 协变 反射 代码

    首先看一段测试代码,自己写的 class Program { static void Main(string[] args) { man OneMan = new man(); var d = One ...

  6. [using_microsoft_infopath_2010]Chapter3 表单设计基础:使用InfoPath布局,控件,和视图

    本章概要 1.使用InfoPath的布局工具构建吸引人的表单 2.使用InfoPath表格工具 3.在表单上添加字段和控件 4.使用section和container组织表单里的控件 5.在一个表单上 ...

  7. 12:打印 1 到最大的 n 位数

    题目:输入数字 n.按顺序打印出从 1 到 最大的 n 位十进制数.比方输入 3 ,则打印出 1.2 .3 一直到最大的3位数即 999. 解析: easy知道不能用 int 等数字类型表示(大数问题 ...

  8. cocos2d-x学习笔记(18)--游戏打包(windows平台)

    cocos2d-x学习笔记(18)--游戏打包(windows平台)           之前做好的游戏,都是在vs2008下编译执行的.假设说想把游戏公布到网上或者和其它人一起分享游戏,那就得对游戏 ...

  9. FPGA视频拼接器的放大和缩小功能

    视频视频器能够把信号源放大和缩小. 对于我们的拼接器而言,它的架构这种: 信号源进入到拼接器中.先进入缩小模块.然后存进DDR中.然后从DDR中读出视频.进入到放大模块,最后依据屏幕的位置,输出到屏幕 ...

  10. hdoj--4501--小明系列故事——买年货(三维背包)

    小明系列故事--买年货 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tota ...