机房重构——加了设计模式的三层(下)

上一篇写到了七层只是说了说,这次从代码上看看这几层是怎么调用的。

外观层的代码就不展示了,这次主要说一下抽象工厂加反射在B层和D层之间的使用

首先是IDAL接口层的代码,

<span style="font-size:18px;">Public Interface IQuitCard
    Function quitcard(ByVal cardinfo As enQuitCard) As Integer
End Interface</span>
从代码上看接口层定义了一个接口,这个接口有一个方法,从IDAL这个名字上看,这个接

口是需要D层来实现的.


然后是工厂层

<span style="font-size:18px;">Public Class FQuitCard
    '选择数据库
    Dim strDB As String = System.Configuration.ConfigurationSettings.AppSettings("DB")

    '创建接口
    Public Function createquitcardDAO() As IDAL.IQuitCard
        '实例化D层类
        Return CType(Assembly.Load("DAL").CreateInstance("DAL" & "." & "QuitCardDAL"), IQuitCard)

    End Function
End Class</span>
选择数据库是利用的配置文件.

然后就是创建接口,从代码的返回值中可以看到返回的是一个接口.这个方法是用的

反射,这行代码的大致意思是,加载D层的文件,实例化DAL.QuitCardDAl这个类,而这

个类要实现IQuitCard 这个接口。


最后是B层代码

<span style="font-size:18px;">Public Class QuitCardBLL
    Public Function quitcard(ByVal encardinfo As enQuitCard) As Integer
        Dim factory As New Factory.FQuitCard '实例化工厂层
        Dim IQuitCard As IDAL.IQuitCard  '实例化接口
        Dim int As Integer
        '实例化D层类
        IQuitCard = factory.createquitcardDAO() 'IQuitCard现在是D层的一个对象
        '调用D层的方法
        int = IQuitCard.quitcard(encardinfo)
        If encardinfo.Card = "" Then
            MsgBox("该卡不存在或已注销,请重新操作", , "退卡失败")
        End If
        Return int
    End Function</span>
从代码上可以看到B层要实例化一个工厂层,而执行完工厂层后是要返回

一个接口的。所以要实例化一个接口作为被赋值的对象。从工厂层的反射可以看到

这创建接口的时候相应的D层的类也被实例化了。也就是说B层要想调用D层的类,

是通过调用IDAL层的类来实现调用的。

下面再来看看这张图

机房重构——加了设计模式的三层(下)_第1张图片

从图中可以看到B层和D层是有一个接口层的。B层通过工厂层来实例化D层

并且要这个D层继承接口.B层调用接口层的方法,由接口层转到相应的D层去执行。

对于抽象工厂的理解还不是很到位,虽然说自己写代码可以写出来了,但是还

有很多不理解的地方。

对于七层的学习一开始是很挠头的,感觉太难了,一说有个抽象工厂就感觉自己要过一个大坎儿,可能是一开始就有这种心情吧,所以不能

静下心来学习,等真正感觉到不学习不行的时候才踏踏实实去理解每一行代码的意思,发现其实挺简单的嘛,虽然现在还有好多不懂,但是明白的

这些可以保证代码能跑起来了。

想起了一句话,输不是败北,怕输才是拜北。



你可能感兴趣的:(机房重构——加了设计模式的三层(下))