小引:
之前看别人的博客,总听大家说着,我们一直强调的“七层”并不存在,实际上是三层+设计模式+反射和配置文件。自己调试和运行了之后,也渐渐的有了新的感觉:所谓的层,就是将函数归类。设计模式,是我们归类的依据,因为有的函数放在两个层可能都合适,但是设计模式会告诉我们放在哪里更好,能更好的解耦和。反射+工厂,主要是用在了数据库的访问中,解决了数据库访问时的可维护性和可扩展性的问题。用反射可以去除switch和if,解决了分支判断的耦合。
图说结构:
刚上手准备实现登录时,真是各种郁闷各种痛啊!所以果断决定先照着其他同学的代码实现登录,以后的功能在自己理解的基础上实现,在这里就不展示copy来的代码了,用图说说我对登录的理解:
1、UI
UI中存放与做简单的和显示有关的判断函数,这些判断可以在后面封装到模块中;
2、BLL
BLL中主要是接收接口从临时数据内存中查到的信息,有判断函数;
3、DAL
DAL中存放具体的查询数据库语句;
4、Facade——外观模式
解B层和U层之间的耦合,从UI调用BLL的函数要先经过Facade。这让我想到了《大话设计模式》中讲的牛市股票的例子:将B层的很多的判断函数便是我们的各种股票和房地产和国债,Facade类库就是增加的基金类。Facade需要了解B层中所有对象的方法和属性,它就是一个高层借口,使外界更容易使用B层中的对象。
5、Factory——工厂类和IDAL——接口类
在工厂类库中我们添加了对配置文件和反射的使用,在接口类中添加了对反射的使用。这两个解除了B层和D层的耦合。依赖倒转,B层不直接依赖于D层而是和D层共同依赖于接口。通过反射的使用,连接数据库,通过更改反射中的字符串可以更换数据库,符合开放-封闭原则。借用《大话设计模式》中的一句话就是:“将程序由编译时转为进行时”,灵活多变。
6、Entity——实体类
在图中我们可以看出,实体类被“万箭穿心”的一类。实体层中,为用户在数据库中的信息定义属性,在其他层调用时可以“ . ”出来。实体类与数据库中的UserInfo对应,我们每实例化一个实体类,在数据库中便有了一个对象,实体类便是将代码和数据库查询信息连接的桥梁。
图中的“外部”是我们引用的VS已经封装好的类中的函数。
值在函数中的传递过程:
小结:
拖拉了一周,今天终于实现重构登录了,虽然比起一些同学来学习的很慢吧,但是一想到收获了很多还是很开心的,比如对里面的结构理得差不多了,学会了用里面的工具,更重要的是认识到了滚动学习的重要性,果然那种“似曾相识”的感觉给人印象最深。同时,也发现了为什么自己以前写的博客总是感觉那么“浅”,因为探索的不够,探索的太浅。当自己写完一篇博客,能感动自己的时候,也就是自己想要的“深”的时候。
以上是我对《机房收费系统个人重构》登录的理解,对于里面的错误,希望大家不吝指出,帮帮我这个菜鸟,提前谢过。

