摘要:2010年,我参加了湖南某矿业监控平台的开发,在此次项目中,我担任了系统设计和开发的工做。该项目是湖南某矿业的一个集水质污染数据的采集,监测,报警,统计,和对数据采集仪器进行控制的平台。本论文结合做者的实践,讨论了设计模式在此次开发中的运用,包括设计中用到的几种设计模式,主要有观察者模式,工厂模式,策略模式等,而且为之后系统设计的复用提供了可能。经过这些模式的使用,有效的提升了系统的灵活性,扩展性和可维护性。这个项目的成功实施,有效的监控了矿业的排污,为企业的污染治理提供了决策,从而为建设绿色环保型企业贡献了一点绵薄之力。web
本论文先讨论设计模式的理论概念,而后介绍湖南某监控平台,接着介绍在本项目中使用到的几种设计模式以及运用这些模式的缘由和取得的效果,最后是讨论系统能够改进的地方。算法
正文数据库
设计模式是人们在多年的软件设计中积累下来,对可复用设计的一个总结。使用设计模式,可以提升系统的可扩展性,可靠性,可重用性。在GOF介绍中,一共有23种设计模式,分为了三个类别:建立型,结构型和行为型。其中建立型主要是对象实例化的抽象,包括:工厂模式,建造者模式,单例模式,原型模式。 结构型主要是将各类类或者对象结合在一块儿造成更大的结构,主要有:装饰模式,适配器模式,门面模式,享元模式,代理模式,合成模式,桥接模式。行为型主要是在不一样的对象之间划分责任和算法的抽象,主要有:策略模式,命令模式,迭代模式,观察者模式,中介者模式,模板模式,访问者模式,备忘录模式,职责链模式,状态模式,解释器模式。c#
湖南某矿业是一家矿业的开采,生产,加工的大型公司。为了有效及时的监控企业的排污,公司急需一套可以检测水质的平台。此次咱们设计的这个平台,就是这样的一个集水质污染数据的采集,检测,报警,统计和对数据采集仪进行管理的平台,它由.NET(c#)+SqlServer2005+PLC开发。平台的架构主要由C/S和B/S组成,C/S由采集仪,PLC通信层,工控机组成,其中采集仪完成数据的采集,PLC负责工控机和采集仪之间的通信,工控机负责对采集仪的控制,完成数据的采集,用不一样监测图的显示监测数据,以及将实时数据传输至数据库服务器持久化。B/S由客户PC,数据库服务器和WEB服务器组成,其中数据库服务器负责实时数据的存储,WEB服务器和客户端PC一块儿负责实时数据的检测,监控,污染浓度超标时的报警,以及实时数据的管理(查询等)。网络图示以下所示:设计模式
通过咱们的分析,从系统的可扩展性和灵活性出发,在检测平台中,有三个地方能够运用设计模式:服务器
2)B/S中的报警功能,当不一样浓度的污染物超标时,要对公司的管理人员进行不一样方式的报警,若是按照通常的思路,这里将会有多个IF/ELSE判断混杂在咱们的类里,耦合度比较大,之后要来修改比较麻烦。策略模式是一种将各自的算法封装,使得这些算法能够相互替换而不影响客户端的一种设计模式。因此在这里咱们决定采用策略模式:将不一样浓度下采起的不一样报警封装为不一样的策略类,此外,创建一个上下文类,进行不一样浓度的条件判断选择对应的具体策略类。这样一来,提供给外部的就只有一个上下文类了,从而将IF/ELSE判断进行了封装,将算法和环境独立开来,有利于类与类之间的高内聚,低耦合。设计类图以下所示:
网络
3)B/S中的数据库持久化。如今数据库服务器上咱们使用的SQL SERVER2005.随着业务的发展和数据量的增大,将来有可能使用其余类型的数据库。工厂模式是一种建立型的设计模式,它“生产”出客户端所须要的“产品”,使客户端在不涉及到复杂的建立细节下“消费”和使用该产品,免除了直接创造该产品的责任,因此在持久化这里采用了工厂模式。 整个B/S部分分为以下几层:WEB表现层,BLL业务逻辑层,IDAL数据持久接口层,SQLServerDALSQLSERVER数据持久层,DALFactory数据持久工厂类,Model实体层。其中IDAL是数据持久层的接口,定义了操做Model的方法。SQLServerDAL是具体的数据持久层,此处是SQLServer,它实现了IDAL.DALFactory是数据库持久层的工厂类,它根据在web.config中XML配置的具体持久层程序集名称,使用反射的方法实例出具体的数据持久层。系统的各层关系为:WEB引用BLL,BLL经过DALFactory的工厂方法获取具体的数据持久层。当咱们须要实际的数据持久层时,就只要经过DALFactory就能够了。这样一来,若是之后要替换其余的数据库,咱们只要开发出实现了IDAL的具体数据库持久层,修好web.config里的XML配置就能够了,很是方便系统持久层的修改。设计类图以下所示:架构
如上所述,在系统的设计中,考虑了系统中的不变和可变的地方,使用了观察者模式,工厂模式和策略模式,不但提升了系统的扩展性,可修改性,灵活性,并且有利于设计的复用,为之后相似的项目开发,打下了一个良好的基础。值得指出来是,系统中还存在一些须要改进的地方,例如,如今的工控机与PLC通信层是采用串口来通讯的,耦合性比较大,尚未将通讯的这一部分抽象出来。若是将来采用其余的方式来通信,例如TCP,就有可能形成极大的修改。因此这个地方也是须要之后来继续完善的一个地方。设计