zoukankan      html  css  js  c++  java
  • 机房收费系统重构(二)—菜鸟入门

      上篇文章中简单的说了说关于三层和实体层的理解,最后那个简单的登录窗体实现了,后面开始问大神们该怎么办了,说到画图,类图,包图,时序图,关于画图的我在这里就不多讲了,大家可以按照业务功能来画,也可以按照用户来画,但是我还是习惯按照功能窗体!下面附上一张包图用来镇楼吧!

      

      下面来讲讲关于图中外观类和反射+工厂的理解和认识吧!

      谈到这,我们来说说这个外观类吧,设计模式我们刚刚学过,外观类就是为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。这是外观的定义,当自己读完这句话的时候我一点头绪都没有,也许这就是所谓的不会举一反三吧,我看看了上面的包图,将外观加在了UI和BLL中间,大家都知道三层之间就是要减少耦合,外观类就是要减少UI和BLL的耦合,在操作中,BLL有的时候要调用UI中的类,但是这样的操作比较复杂,这样提供一个外观类,不需要管这些操作有多复杂,只需调用这个接口就可以了!

      关于反射+工厂的理解,如图所示,在BLL和DAL之间加了一个IDAL的接口,减少BLL和DAL的耦合性!接口中包含具体的类的所有方法,当BLL与DAL建立联系的时候我们只需要调用接口就可以了,前提是必须把接口和具体类接通,事实上,接口和具体类之间的关系知识两者之间创建了一条通道,接口中没有具体的功能,但是有那个类使用的一个方法,所以使用接口让接口与具体类进行互通,引用和创建实例!

      具体过程先引用了反射,然后创建接口,在通过反射,把DAL层具体类的实例反射给接口。看到这句话有点绕口呢。最后结果就是接口与具体类,可以使用接口中具体类的方法了!

    Imports System.Reflection '添加反射的引用
    Imports System.Configuration '添加配置文件的引用
    Imports IDAL
    Public Class LoginFactory
        '利用反射+配置文件+抽象工厂
        Dim strDB As String = System.Configuration.ConfigurationSettings.AppSettings("strSqlConnection")
        '表示读取配置文件,如果配置文件中是SQLserver数据库就访问,如果是别的就放访问别的,不需要更改代码
        Dim strQueryWorkLog As String = System.Configuration.ConfigurationSettings.AppSettings("strSqlConnection")
        '创建用户表工厂
        Public Function CreateUserInfo() As ILogin
            Return CType(Assembly.Load("DAL").CreateInstance("DAL" & "." & "LoginDAL"), ILogin)
        End Function
        Public Function CreateWorklog() As IWorkLogin
            Return CType(Assembly.Load("DAL").CreateInstance("DAL" & "." & "WorkLogin"), IWorkLogin)
        End Function
        Public Function CreadteStudentInfo() As IRecharge
            Return CType(Assembly.Load("DAL").CreateInstance("DAL" & "." & "RechargeDAL"), IRecharge)
        End Function
    End Class

      把DAL层里面的类反射到BLL层里面,也就相当于在BLL层里面生产了DAL层的类,然后反射得到具体类,抽象出一个层,就是Factory,只要BLL引用工厂,便可以通过工厂返回具体类了!这是我代码七层的部分:

    这些关系虽然复杂,但是在我们今后机房收费编写的过程中会渐渐理解的!  

    今天只是浅显的说了自己对于外观和反射+工厂的了解!希望大家能够给我提点建议,能够更好的理解这部分内容!

  • 相关阅读:
    [Angular] How to show global loading spinner for application between page navigation
    [NgRx] NgRx Data Fetching Solution
    [NgRx] NgRx Entity Adapter Configuration
    [Javascript] Construct a Regex to Match Twitter Mentions with Regexr
    [Dart] Dynamic variable in Dart
    [NgRx] NgRx Runtime Checks
    [NgRx] Setting up NgRx Router Store and the Time-Travelling Debugger
    浅析数据库设计三范式
    建议别买三星Gear:半电脑产品 设计糟糕
    持续集成理论和实践的新进展
  • 原文地址:https://www.cnblogs.com/xzpblog/p/5117984.html
Copyright © 2011-2022 走看看