读书人

机房收费系统小结之5抽象工厂+反射

发布时间: 2013-10-08 16:55:16 作者: rapoo

机房收费系统总结之5——抽象工厂+反射+配置文件

起初,机房收费系统用纯三层在做,三层结构已把高内聚,低耦合的思想发挥的淋漓尽致。因为一直听说“抽象工厂”,也开始尝试去应用,经过了一番尝试,也OK了。其中当然会用到反射和配置文件,而接口的引入也是顺理成章的。接口对B层和D层又完成了进一步解耦。


形象起风,先上一张图:
机房收费系统小结之5——抽象工厂+反射+配置文件
有了图也就类似于有了思想,有了宏观的把控。可以看到,这个包图,是从最经典的三层UI-BLL-DAL加入设计模式演化而来。之所以采用抽象工厂模式是考虑到更换数据库的方便。(而应用外观模式,是为了解决UI层和BLL层耦合性过高的问题,UI层不必知道BLL层的存在,Facade(外观)知道BLL层的哪些类负责处理哪些请求,它将UI的请求代理给适当的BLL层的类。使外部调用更方便。)

下面就以登录(Login)这个小Demo中的部分功能为例来阐述过程的实现。


一、SqlHelper

前面的一篇博客(机房收费系统总结之3——SqlHelper)介绍过,这里不再赘述。


二、Entity
实体层并不属于三层中的任何一层,它是独立出来的一层,可以把他看做自定义变量的组合,供三层使用。数据库设计好了,我们要根据数据库中的表抽象实体类,在机房收费系统中,实体类基本上是跟表一一对应的,一个表映射出一个实体类,表的字段即为实体类的属性。但,对于全局用的东西,我们可以建一个实体类,把该全局变量作为它的属性。所以,实体类的数量可能多余表的数量。
Imports FacadeImports EntityPublic Class frmLogin    Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click        Dim strComName As String = System.Net.Dns.GetHostName()     '获取计算机名并赋值给变量strComName        '给公共变量中的计算机名和用户名赋值        PublicEntity.ComName = strComName        PublicEntity.UserName = txtUserName.Text.Trim()        '定义一个UserInfoEntity类型的实体类变量,并分别把输入的用户名和密码赋值给变量的UserName属性和Password属性        Dim enUserInfo As New UserInfoEntity With {.UserName = txtUserName.Text.Trim(), .Password = txtPassword.Text.Trim()}        '定义一个UserWorkEntity类型的实体类变量,并分别打输入的用户名和所获得的计算机名赋值给变量的UserName属性和ComName属性        Dim enUserWord As New UserWorkEntity With {.UserName = txtUserName.Text.Trim(), .ComName = strComName}        '判断是否输入了用户名及密码        If txtUserName.Text.Trim() = "" Then            MessageBox.Show("请输入用户名", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)            Exit Sub        ElseIf txtPassword.Text.Trim() = "" Then            MessageBox.Show("请输入用密码", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)            Exit Sub        End If        Try            Dim facadeLogin As LoginFacade = New LoginFacade()      '声明LoginFacade类型变量facadeLogin,并实例化            facadeLogin.Login(enUserInfo, enUserWord)               '调用Login()方法,完成登录            Me.Hide()                                               '隐藏登录窗体            frmMain.Show()                                          '显示主窗体        Catch ex As Exception                                       '捕获异常并显示            MsgBox(ex.Message, CType(vbOKOnly + MsgBoxStyle.Information, MsgBoxStyle), "提示")        End Try    End SubEnd Class 


上面就是实现系统登录Demo的部分功能了,拿出来和大家一起分享,其中的不足之处,还希望大家多多指正。
1楼lfmilaoshi昨天 21:50
系统登录Demo写得很详细,也很深入浅出。你尝试着做个视频吧!

读书人网 >其他相关

热点推荐