vb.net版机房收费系统——教你七层架构(三)—外观模式
上次我们看到了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
写的非常明确,多说无益。
posted on 2017-06-03 17:05 yjbjingcha 阅读(165) 评论(0) 编辑 收藏 举报