运用Linqto Entity快速构建信息系统结构

2012-06-16 08:09韦军帅勇
科技视界 2012年24期
关键词:事务信息系统定义

韦军帅勇

(遵义医学院医学信息工程系 贵州 遵义 563000)

0 前言

信息系统,指的是利用各种信息技术,尤其是硬件技术(如:网络、计算机、存储设备)和软件技术(如:数据库、中间件、开发平台、运行环境)构建的,能够面向特定业务需求提供相应业务信息处理和业务流程支持功能的系统。

Entity框架的全称是ADO.NET Entity Framework,是微软在NET Framework v3.5 SP1引入的新功能,比Linq To SQL更加强大的ORM(Object/Relational Mapping)框架,它让开发人员只需要着眼于对象模型的开发,而不需要考虑它们是如何与关系数据库交互,该框架的主要特点:

· 支持多种数据库(Microsoft SQL Server、Oracle和DB2等);

· 强劲的映射引擎,到Net4.0中能很好地支持存储过程;

· 提供Visual Studio集成工具,进行可视化操作;

· 能够 与 ASP.NET、WPF、WCF、WCF Data Services 进行很好的集成。

目前Entity Framework(EF)已经开源,又有微软强力推动,EF必将成为未来一段时间windows平台的主流开发架构,面向程序员级的EF开发能够在网上得到很多的范例和教程。然而,如何运用EF对信息系统分层以及在各层中布署,却很少有涉及,作者在一次信息系统设计工作中,对此进行了初步的研究和实践,取得了良好的效果。

1 基于EF的信息系统层次化设计

如图1,我们将系统分为6层,数据层(sqlsever2008)、持久层(Entity)、数据提供层(SQLServerProvider)、数据服务层(Business)、Web 事务层(Web),界面层(Web.UI)。 Web.Control用于存放自选开发的控件,YYControls存放第三方控件。

图1 系统分层结构

图2 Web事务层

图3 Category实体类的4种访问方式

持久层通过EF将数据层数据库表和视映射为Entity层实体类,表中字段对应实体类属性(property),如果有存诸过程或外键关系也能被Entity管理,这样,客户端编程人员就可以专注于业务中对象关系的处理,而不必知道数据存取的具体细节,所有的实体类与一个管理类ObjectContext都写在一个edmx中,这个edmx由开发平台自动生成。

图4 数据提供层

图5 接口方法被DataProvider类继承实现

Web事务层Interfaces文件夹(如图2)中定义的接口规定客户端访问数据方式,每个接口文件定义edmx中一个实体类的数据访问方式,每个实体类都有4种访问方式,即:Add(向数据库表增如记录)、Remove(删除记录)、Update(修改记录),Get(查询)。每种访问方式根据实际访问需要有多个不同输入参数的重载。如图3:接口SY_Category_Interface.cs定义了Category实体类中4种向数据库Categoty表的访问方式(篇幅所限,没有写出所有方法,返回值也未给出),对应于所有实体类的接口由一个总接口继承 (public interface SY_Whole_Interface:SY_Archive_Interface,SY_Category_Interface,SY_Code_Interface,……),再在文件SY_Whole_Abstr-Class.cs中 以 public abstract class SY_Whole_AbstrClass:SY_Whole_Interface方式由虚类SY_Whole_AbstrClass继承,至此,Web事务层完成了系统向上层提供的数据访问功能的定义,并将这些功能封装在虚类SY_Whole_AbstrClass中交给数据提供层(SQLServerProvider)实现。

数据提供层(SQLServerProvider)的功能很单纯,实现Web事务层中接口定义的所有方法。每个Provider*.cs文件实现Web事务层Interfaces文件夹中对应SY_*_Interface.cs定义的方法(如图4),如:ProviderCategory.cs实 现SY_Category_Interface.cs中定义的方法(如图 5),可见,SQLServerProvider层与Web层之间的通讯是通过继承关系即 partial class DataProvider:SY_Whole_AbstrClass实现,每个Provider*.cs文件实现DataProvider类的部分方法。

图6 Bussiness层

图7 Bussiness层服务的实现

Bussiness层(如图6)将Provider层实现的数据访问方法以服务的方式提供给Web.UI界面层。在这层,每个类对应一个实体类(数据库表),如文件CategoryService.cs中存放的类CategoryService就是为界面层提供对数据库表SYS_Category的访问服务,其服务方式实际就是调用Provider层DataProvider类一个实例的相应方法 (如图7),与Bussinessr层不同的是,Provider层实现了对所有数据库实体的访问方法,但这些方法都属于同一个类DataProvider。Bussiness重新将服务按实体类(数据库表)分别提供的目的主要在于避免UI层开发人员感到迷惑。

2 结论

在上述6层结构中,数据层是数据提供者,UI层是数据最终消费者,Entity层将数据库实体映射为程序中的实体类,Web层定义能提供的数据访问方式,Provider层实现这些方式然后传给Bussiness层以服务的方式向UI层提供,每一层功能明确,服务与被服务关系明确,使系统具有很好的可靠性、扩展性,只要数据库结构不是根本性变化,都可只在Entity层作少量的修改,系统就能满足新的业务需求。

[1]李智伟.基于ASM的元模型形式化语义的研究[J].计算机应用究,2012(01):161-164.

[2]孙宏旭.基于有限状态机的模型转换方法的研究[J].计算机技术与发展,2012(2):10-13,17.

[3]曾一.支持MDA的设计模式建模与模型转换方法研究[J].计算机工程与应用,2012(1):76-80.

[4]马于涛.一种Web服务综合描述模型[J].电子与信息学报,2012(3):549-556.

猜你喜欢
事务信息系统定义
基于分布式事务的门架数据处理系统设计与实现
企业信息系统安全防护
河湖事务
基于区块链的通航维护信息系统研究
信息系统审计中计算机审计的应用
基于SG-I6000的信息系统运检自动化诊断实践
修辞学的重大定义
SQLServer自治事务实现方案探析
山的定义
移动实时环境下的数据一致性研究