机房收费系统重构起始——举步维艰

    机房重载开始已经有十天了,但是这十天一直是特别纠结的,看了很多师哥师姐的博客,能看懂,对于三层也有了一定的理解,但是还要加上设计模式中几个模式,为了更好地更换数据库,需要用到抽象工厂加反射及配置文件,此外为了进一步降低U层和B层的耦合性,还需要在两者之间加上外观模式,使得U层与B层的联系没有那么强,具体遇到的和纠结的问题如下:

    之前的三层结构实现各层与实体的关系:


    加入设计模式之后如下图:

    它们之间改进的是什么呢?

  Ø  为什么加抽象工厂+反射+配置文件和外观模式

    原因:为了降低系统的耦合性,符合系统的开放封闭原则,故而加入了抽象工厂和外观模式。

    u  抽象工厂+反射+配置文件

    这怎么说呢?自己看了师哥师姐写的博客之后想了想,思路有点清晰,但是不是十分明白,总而言之,在进步就好。

    抽象工厂+反射+配置文件最终目的是为了可以灵活的更换数据库,而不需修改大量的代码,正是符合了设计模式中开放封闭原则。

    抽象工厂定义:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。

好处:便于更换数据库产品,灵活性强,让具体的创建实例过程和客户端分离。

    反射技术:提供了封装程序集、模块和类型的对象。可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。

    反射使用格式:Assembly.Load("程序集名称").CreateInstance("命名空间.类名称“)

    反射技术的使用目的是:去除switch分支判断带来的麻烦,使得实例化更加的方便。程序集即是具体要实例化的地方,同命名空间即D层要实例化的类名。

    配置文件是写在界面层即U层的,添加两个Key,一个是连接数据库的字符串,一个是通过反射来产生不同数据库的DAL层的

    这样一来就可以实现设计模式中的“开闭原则”,如果更换数据库只需要增加类(DAL),而不需要更改,更不需要重新编译。

    代码:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><appSettings>
    <!--定义访问D层所在程序集字符串-->
    <add key="DB"  value="Sqlserver"  />
    <!--定义访问数据库字符串-->
    <add key="cnStr"  value="Data Source =.;DataBase = Charge;User ID=sa;Password=123456" />
  </appSettings></strong></span>

    在第二图中我们可以看到B层与D层之间加了一个接口层,并且接口层与工厂及B层均存在联系,B层依赖于工厂,而工厂依赖于接口层,原因在于在工厂不仅定义可以灵活更换数据库,而且还创建了各个类的数据访问层接口,B层依赖于工厂可以定义一个接口,进而访问接口中的方法,而接口这个类中定义了各个接口的方法,D主要就是实现接口中的方法,并且工厂中创建数据访问层接口的方法必须依据接口层来创建,所以看到上图中它们的关系,B层通过定义接口,访问接口的方法,而方法的具体实现是在D层,这样只需B层只需与接口层打交道即可,降低了B层与D层之间的耦合性,使得系统更加灵活。

    u  外观模式

    外观模式是为了降低U层与B层之间的耦合性而建立的。我们知道,在三层模式中U依赖于B层,而B层是依赖于D层,也就是U和B层之间的联系是紧密的,然而我们知道在U层访问B层的方法中,有些方法在许多窗体中是公用的,或者说不同用户的权限也是不一样的,所以我们可以把相同权限的整合在一个类中,这样用户调用时,直接调用外观的方法,具体实现放在B层,这样使得U层和B层的耦合性也进一步降低,便于系统的灵活性。

    自己目前只是理解到这一步,自己还在细细研究,希望能够有进一步的收获~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 26
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值