基于抽象工厂模式的科研项目管理系统的设计
2017-10-21李绍华冯晶莹
李绍华+冯晶莹
摘要:该文将传统三层架构模式和基于抽象工厂模式的三层架构进行了对比。基于改进的三层架构模式,使用Visual Stu-dio 2013和SQL Server 2012设计和开发了科研项目管理系统,实现项目管理的信息化。使用存储过程提高系统的执行效率和安全性。
关键词:科研系统;三层架构;抽象工厂;ASP.NET
1背景
随着高校教师对科研项目申报数量的增加,项目管理部门的任务日渐繁重,而使用传统手工方式对项目进行管理的形式越来越不能适应时代发展的要求,严重影响了相关人员的工作效率和准确性。
信息化和网络化进程的不断加速,在大数据时代通过运用现代网络和计算机技术,构建高效和实用的信息管理平台,实现科研项目管理工作的数字化成为可能,它可以有效的缩短管理时间、简化管理过程。
2三层架构体系结构
NET软件项目设计为了实现“高内聚、低耦合”的设计思想,通常使用三层架构模式(视图层、业务逻辑层和数据访问层),将项目代码根据功能写在不同的层次模型中。如图1所示。
1)视图层:直接和用户进行交互,收集用户在界面中输入的数据并通过调用方法时,实参给形参传值,传递给业务逻辑层;将业务逻辑层方法返回的数据以某种形式显示在界面中。
2)业务逻辑层:负责数据的加工处理,在视图层和数据访问层之间起到数据中转站的作用。
3)数据访问层:负责数据的存储和读取。根据业务逻辑层传递过来的指令和数据,通过INSERT、UPDATE、DELETE或SELECT语句操作数据库。.NET框架中使用ADO.NET的连接类、命令类、数据读取类、数据适配器类和数据集类等操作数据库。
4)实体层:将数据库中关系型表进行面向对象化处理,实现数据对象在视图层和业务逻辑层之间的传递。
根据项目规模和需求,可以选择Oracle、SQL Server、DB2、Sybase、MySQL、Access等关系型数据库。这些数据库都遵循结构化查询语句(Structure Query Language,SQL),但不同數据库的SQL文、存储过程、函数、触发器、游标的使用规则不尽相同。
在ADO.NET框架中,针对不同数据库使用不同的命名空间中的类。例如:
在传统的三层架构体系中,视图层依赖于业务逻辑层,业务逻辑层依赖于数据访问层。如果后台使用的数据库发生变化,数据访问层和业务逻辑层的代码都需要大量修改,不利于系统的扩展。3抽象工厂模式
例如,A厂生产布料,B厂生产纽扣,c厂生产针线。但客户要的是衣服,这样就需要一个D厂,D就是专门制作衣服的。客户需要衣服不必去找ABC厂,直接找D即可。客户也不必知道D的衣服是怎样做成的。ABC厂的变化不会直接影响到客户。
抽象工厂模式提供创建一系列相关或相互依赖的接口,而无需指定他们具体的类。从字面上的理解就是给上一层或调用者提供一系列功能的接口,让上层或调用者自己去实现。在具体工厂中负责创建产品结构中每个产品,它包含了创建不同产品的商业逻辑,实现抽象工厂中的接口,定义产品的共同接口。
抽象工厂模式可有效降低模块间的耦合性,最大限度地实现软件复用,实现“高内聚、低耦合”的设计目的。
4基于抽象工厂模式的三层架构体系
为了解决传统三层架构模式层与层高依赖度,不利于扩展的弊端,推荐使用基于抽象工厂模式的三层架构体系。抽象工厂模式引入了面向接口编程思想,使上层类不具体依赖于下层类,而只依赖于下层提供的一个接口。将数据访问层细分为数据接口层、数据接口实现层、数据工厂层以及数据工具层,从而使得业务逻辑层依赖于数据接口层,与后台数据库不发生直接关系。基于工厂模式的三层架构体系如图2所示。
如果项目更换后台数据库,只需要修改抽象工厂模式的数据访问层即可。
5科研系统的框架设计
1)使用Visual Studio 2013创建名为SRM的空白解决方案。新增名为SRMUI的ASP.NET空网站项目;名为Business、DALFactory、DBUtility、Entity、IDAL、SQLServerDAL和ToolUtili-ty的类库项目,如图3所示。
为了便于统一管理,设置七个类库项目的程序集名称和默认命名空间为SRM.Business、SRM.DALFactory、SRM.DBUtility、SRM.Entity、SRM.IDAL、SRM.SQLServerDAL和SRM.ToolUtili-ty。如图4所示。
根据依赖关系,为程序集添加引用:SRMUI引用Business、Entity和ToolUtility;Business引用IDAL、DALFactory和Entity;DALFaetory引用IDAL;IDAL引用Entity;SQLServerDAL引用DBUtility、IDAL和Entity。
21为数据库中每张表,在Business程序集中创建对应的业务逻辑类,如图5示。该层不直接依赖数据访问层,而是依赖IDAL接口层和DALFaetory工厂层。通过工厂层创建程序集指定类的实例,并决定调用哪个数据访问层的数据操作方法。
3)为数据库中每张表,在Entity程序集中创建对应的实体类,如图6所示。实现数据以对象的形式在SRMUI、Business、IDAL和SQLServerDAL之间传递。
4)为数据库中每张表,在IDAL程序集中创建对应的数据接口,如图7所示。接口中声明了在SQLServerDAL程序集中实现的方法。
5)为数据库中每张表,在SQLServerDAL程序集中创建对应的数据接口实现类,实现IDAL程序集中接口的方法,如图8所示。根据数据库的类型,可以定义OracleDAL、MySQLDAL或AccessDAL等。
在SQLServerDAL程序集中,本项目使用存储过程实现对数据库的操作,原因如下:
①执行效率高。存储过程只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而SQL语句每执行一次就编译一次。
②方便事务处理。当对数据库进行多个复杂操作时,可将复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
③提高代码复用性。存储过程可以重复使用,减少数据库开发人员的工作量。
④安全性高。通过权限设定,可指定只有某些用户才具有对指定存储过程的使用权。
⑤减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程名称以及参数即可,降低网络传输的数据量。
6)在DALFactory程序集中添加DataAccess类,如图9所示。DALFactory通过配置文件和反射机制实现SQLServerDAL的实例化,是通过多态机制实现的,如图10所示。这样的好处就是如果要更换数据库,只需要更改Web.config配置文件,如图11所示。
使用反射机制动态的创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型应用程序需要在运行时从某个特定的程序集中载人一个特定的类型,以便实现某个任务时可以用到反射。反射主要应用于类库,这些类库需要知道一个类型的定义,以便提供更多的功能。
7)在DBUtility程序集中添加SQLDBHelper类,实现与SQLServer数据库的交互。如图12所示。根据数据库的种类,可以定义0racleDBHelper、MySQLDBHelper或AccessDBHelper等。
8)在ToolUtility程序集中添加若干个工具类。如图13所示。
6科研系统的运行
科研项目管理系统的首页运行如图14所示。
7结束语
科研项目管理信息化平台可以实现对项目活动的全程跟踪。信息化平台将人员、项目、评审、成果和权限等管理有机结合在一起,有效地提高了项目成果管理水平和效率。基于抽象工厂模式三层体系架构的使用,便于项目的移植和扩展。endprint