zoukankan      html  css  js  c++  java
  • 机房收费系统重构(三)—工厂+反射+DAL

      前段时间用简单的三层实现了窗体登录功能,心中有点小小的成就感,但是很快就被泼了凉水,机房收费不可能只用三层实现,如果你用三层,也就是说后面机房收费所有的功能都必须使用三层来实现功能。所以一周前始了七层的研究。经过一个星期的看博客,总结,调代码,终于实现了窗体登录,信息录入,和简单充值查询功能。

      说说自己这次七层之旅的总结吧。

      1.毋庸置疑,研究一个窗体功能,我首先判断的是需要用到数据库中的哪些表(这是属于我自己的编程习惯,不适用全部),然后再实体层中将表中的字段表示出来,有多少个表就有多少实体类,实体类只会多于表的数量!一个表映射出一个实体类,表中的字段就是实体类的属性!这里附带上自己代码中的一部分吧!

    Public Class LoginModel
        Private _userID As String
        Private _level As String
        Private _password As String
        Private _userName As String
        Private _computer As String
    
    
        Public Shared UserHead As String  ' 设置全局变量
        Public Shared UserLevel As String
    
        Public Property UserID() As String
            Get
                Return _userID
            End Get
            Set(value As String)
                _userID = value
            End Set
        End Property
        Public Property PassWord() As String
            Get
                Return _password
            End Get
            Set(value As String)
                _password = value
            End Set
        End Property
        Public Property level() As String
            Get
                Return _level
            End Get
            Set(value As String)
                _level = value
            End Set
        End Property
        Public Property UserName() As String
            Get
                Return _userName
            End Get
            Set(value As String)
                _userName = value
            End Set
        End Property
        Public Property Computer() As String
            Get
                Return _computer
            End Get
            Set(value As String)
                _computer = value
            End Set
        End Property
    End Class

      2.接下俩进行的是关于工厂+反射+接口+DAL的介绍了

      这个过程中涉及的东西比较多。我先概括的说说自己这部分用到了什么知识吧!

    (1) 用反射+抽象工厂的数据访问程序

    开始以为是新知识,但是大家可以看看咱们《设计模式》,抽象工厂一章中说到反射利用字符串来实例化对象,而变量时可以更换的!

    大家记住一段简单的代码吧:

    Assmbly.load("程序集名称").CreadteInstance("命名空间.类名称")我把这段话理解为制造接口的过程。

    关于这部分内容会有专门的博客写到!

    在敲工厂时会经常出现这样的错误:


    出现了这个错误,查了查博客,下面我只说出自己的方法,将DAL中生成输出路径,改为UI的生成输出路径即可,关于这个错误,有好多详细的博客介绍。我就不多说了。

    (2)接下来我就开始理解关于工厂,接口和DAL之间的关系了,,工厂反射,就是防止更换数据库,接着工厂其实就是生产接口,将DAL中的类生成接口,然后在DAL中调用接口,来实现接口。

        关于DAL中对数据库的增删改查都是重复的,这里我们抽象出一个类Sqlhelper,我们学的是面向对象,就是学会使用面向对象的思想,关于Sqlhelper博客请看我的这篇博客机房收费重构(四)-SqlHelper

    Sqlhelper类我写在了DAL的下面,而后面的代码就会变得简单起来,就是声明,实例化,返回值的应用了。附上小部分代码:

    <strong><span style="font-size:18px;">    Public Function RechargeQuery(cardno As Model.RechargeModel) As Model.RechargeModel Implements IDAL.IRecharge.RechargeQuery
            Dim sqlparams As SqlParameter() = {New SqlParameter("@CardNo", cardno.StuInfoQuery)}
            Dim strText As String = "select * from T_StuInfo where CardNo =@CardNo"
            Dim helper As New SqlHelper
            Dim cmdtype As CommandType = New CommandType()
            cmdtype = CommandType.Text
            Dim table As DataTable
            Dim Ucardno As New Model.RechargeModel
            table = helper.ExecuteQuery(strText, cmdtype, sqlparams)
            If table.Rows.Count <> 0 Then
                Ucardno.StuInfoQuery = table.Rows(0).Item("CardNo")
            End If
            Return Ucardno
        End Function</span></strong>
    其实在这一部分还会有关于存储过程的介绍,但是介于篇幅的影响就不向大家介绍了。

     这篇文章纯属个人理解,如有错误理解,欢迎大家踊跃拍砖!

      接下来我会向大家介绍BLL和外观层的理解


  • 相关阅读:
    双端队列广搜
    多源bfs
    leetcode刷题-67二进制求和
    leetcode刷题-66加一
    leetcode刷题-64最小路径和
    leetcode刷题-62不同路径2
    leetcode刷题-62不同路径
    leetcode刷题-61旋转链表
    leetcode刷题-60第k个队列
    leetcode刷题-59螺旋矩阵2
  • 原文地址:https://www.cnblogs.com/xzpblog/p/5117983.html
Copyright © 2011-2022 走看看