走在机房重构的路上之七层(二)

来源:互联网 发布:dota2淘宝买饰品便宜 编辑:程序博客网 时间:2024/05/02 08:50

         上一篇写到了七层中B层、U层和外观层,下面就继续这个征程“欢迎乘坐本次列车,列车前方到站:七层(二),下一站列车停留30分钟,到达目的地的旅客请收拾好心情准备下车!30分钟内我将带各位参观"工厂"、观摩实体”。

        首先来说实体层,就像上一篇中包图显示的那样,实体层的包上有五条线,这五条线代表的是其他层对它的引用关系,那么实体层是干什么的,引用又有什么用?下面一一道来:实体对象实际上是对应着数据库里的每张表的,我们把表里的字段封装在1个实体对象里 当你想用哪个字段 你就就通过该实体对象的get() set() 把那个字段提取出来 这比你临时创建1个变量要灵活的多 而且便于程序的维护和扩展.在实际的3层结构开发中,专门有个实体层,他的作用就是便于层和层之间的数据传递 .实体体现的是面向对象的方法,它实现了层之间的数据传递。这样说来引用这个关系的理解也就无师自通了,引用就像其它层和它之间的亲属关系,有了引用他们才是亲属,其它层才能和实体层之间更方便的“借用”数据。

                 说再多也是理论,下面就用登录窗体中的实体层来验证上面的理论吧:

   

Public Class LoginModel    Private userID As String   ‘登陆名    Private passWord As String    ‘密码    Private level As String            ’级别    Private name As String    Private status As String    Public Shared UserHead As String  '设置全局变量    Public Shared UserLevel As String    Public Property MuserID() As String        Get            Return userID        End Get        Set(value As String)            userID = value        End Set    End Property    Public Property MpassWord() As String        Get            Return passWord        End Get        Set(value As String)            passWord = value        End Set    End Property    Public Property Mlevel() As String        Get            Return level        End Get        Set(value As String)            level = value        End Set    End Property    Public Property Mname() As String        Get            Return name        End Get        Set(value As String)            name = value        End Set    End Property    Public Property Mstatus() As String        Get            Return status        End Get        Set(value As String)            status = value        End Set    End PropertyEnd Class


        而实体层中这些对应的恰好是对数据表中数据的封装,下面登陆的数据表:

   

           正好是一一对应的,所以大家有没有对实体层有点理解了??

         然后来看工厂层:

Imports System.Reflection '声明反射的命名空间'必须先添加对接口的引用,否则IDAL会报错Imports IDALPublic Class LoginFacy    '对配置文件进行引用的代码    Dim strDB As String = System.Configuration.ConfigurationSettings.AppSettings("strSqlConnection")    Dim strAddWorkInfo As String = System.Configuration.ConfigurationSettings.AppSettings("strSqlConnection")    Public Function CreateUserInfo() As IDAL.IUser      'IDAL的命名空间下的IUser接口        'CType:返回表达式显式地转换为指定数据类型、对象、结构、类或接口后的结果。        Return CType(Assembly.Load("DAL").CreateInstance("DAL" & "." & "LoginDAL"), IUser)        '当前“程序集”的名称是DAL;当前命名空间的名称是:DAL,要实例化的类名为,LoginDAL;    End Function    '将记录写入工作日志中    Public Function CreateWorkInfo() As IDAL.IWorkInfo        Return CType(Assembly.Load("DAL").CreateInstance("DAL" & "." & "WorkInfoDAL"), IWorkInfo)    End FunctionEnd Class

            就像上面代码显示的那样,工厂中声明反射空间、引用接口、使用配置文件。然后定义两个接口:CreateUserInfo(验证用户名)和CreateWorkInfo(用来将登陆记录写入工作记录),那么是不是就可以这样说:工厂用来生产程序所用到的接口,比如登陆用到的用户名和更新工作日志的接口。

           说道工厂,我们就不得不提到它的姐妹:接口。接口也是一种抽象,它可以实现多个类的多重继承,而应用到机房中就是:接口用来对D层抽象,D层实现接口,当D层发生变化后,直接进行相应修改,接口也添加或删除某个东西就行了,而其他用到D的层不用看到D层发生了什么变化,因为它只关心D层给它什么东西,所以只要通过接口这个对D层抽象和封装的层就行。

          在这里我们明确抽象类和接口的区别:接口是一种抽象类的变体,并且其中的方法全都是抽象的;下面看接口的代码:    

Public Interface IUser    '将LoginModel中user的值传递过来,传给User_Login    Function User_Login(ByVal user As Model.LoginModel) As System.Data.DataTable    '表示记忆体中资料的一个资料表End Interface
Public Interface IWorkInfo    '定义一个保存工作记录的方法,将WorkInfoModel中的workInfo值传递过来;作为布尔型,只有TRUE和FALSE两种    Function SaveWorkInfo(ByVal workInfo As Model.WorkInfoModel) As BooleanEnd Interface

         这次的机房中用到很多新知识,更确切的是对旧知识的重新组装,所以我们需要更多的理解和归纳,现在还剩一个D层的介绍,大家先给自己点时间消化一下。下篇再见!

 

1 0
原创粉丝点击