在我们提高班,到现在为止机房收费系统是每个人的必做项目,而且不止一遍。但是每一遍有每一遍的意义。
第一遍,我们用的VB6.0,当看到这个系统是自己一行一行敲出来的时候,心里有种不敢相信的感觉,所以我们
建立了兴趣,建立了信心,只要坚持,我们一定能够成功。
第二遍,用VB.NET,这一次就说不好要重做几次了。我们学习了分层,所以在这要体验分层带来的好处,分层
带来的纠结,分层分了半年多了,却发现分的还是不好。
第三遍,是基于第二遍的,因为这次,要体验合作开发的快乐。
经过上次老师讲解,在讲完的当时,我发现,原来是这个样子啊。但是好奇心让我,不得不想着去做两个Demo
来验证一下。
首先,说一下这个系统的样子,系统采取经典三层架构,然后添加了外观模式来对功能进行模块的划分,还用了
抽象工厂加反射来实现数据库的更换方便。下图是架构图。
此架构通过抽象工厂加反射使得工厂和DAL层没有依赖的关系,所以在生成的过程中,DAL层的DLL是不会生成
到其他层里面的bin的Debug下面的,也就使得如果不对DAL层进行那么一点点处理,那么是会报错的,为什么报错自
己研究。
我用了两种方法,一种是在UI层添加了对DAL层的引用(是万万不可取的,因为在架构图上,是没有任何层对DAL
层进行了依赖。第二种就是讲DAL的生成路径改成了UI下的bin的Debug。
对于第一种,因为违反了架构图,所以做法不可取,但是,是不是我在UI层添加了对DAL层的引用,那么编写好
的程序打包后DAL不是仅仅打包成一个.dll文件,而是将DAL.dll文件打包到UI中了,那么在更换了DAL.dll后,程序就
无法运行。按照上面的架构来说,就是说BLL中原来的登陆检查是只检查是否已登陆,那么我现在讲BLL中的登陆方
法体改成先检查是否存在此账号,然后再检查是否已经登陆,然后将生成好的dll替换原来的,那么程序依然只是还执
行只检查是否已登陆。
我后来做了个实验,下面我用一个比较简单的实验来澄清这个事情。
Imports BLL Public Class btnTest Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim objTest As New TestManage MsgBox(objTest.TestDemo()) End Sub End ClassBLL
Imports DAL Public Class TestManage Public Function TestDemo() As String Dim objTest As New TestDAO Return objTest.TestDemo() End Function End ClassDAL
Public Class TestDAO Public Function TestDemo() As String Return "这是原来的DAL层" End Function End Class打包,安装,运行界面如下:
然后生成,进行替换,运行结果如下: