您的位置:首页 > 编程语言 > ASP

求解:ASP.NET中的添加引用到底是一个什么样的事情

2012-08-03 21:03 281 查看
在我们提高班,到现在为止机房收费系统是每个人的必做项目,而且不止一遍。但是每一遍有每一遍的意义。

第一遍,我们用的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替换原来的,那么程序依然只是还执

行只检查是否已登陆。


我后来做了个实验,下面我用一个比较简单的实验来澄清这个事情。

首先我们建一个经典的三层架构吧,下面是架构以及引用关系:









每层中的代码如下:

UI
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 Class
BLL
Imports DAL
Public Class TestManage
    Public Function TestDemo() As String

        Dim objTest As New TestDAO
        Return objTest.TestDemo()

    End Function
End Class
DAL
Public Class TestDAO

    Public Function TestDemo() As String
        Return "这是原来的DAL层"
    End Function

End Class

打包,安装,运行界面如下:




现在,三层是顺序依赖的,如果按照老师说的,那么如果我如果只使得DAL层的接口保持一致,而DAL层中的代
码发生变化,那么程序将无法执行,可是事实是,我新建了一个解决方案,然后重新写了DAL,然后对DAL进行替换
,下面是新DAL层中的代码






然后生成,进行替换,运行结果如下:





所以,通过此实验,发现如果在UI层对DAL层进行了添加引用。所以我感觉引用只是把dll复制到了自己目录下的
bin/Debug下,之所以不能再UI层添加DAL层的引用,是因为违反了架构,所以需要做的是该生成路径。

但是引用到底还包含哪些呢?求大虾们赐教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: