APP下载

基于.NET技术和MVC的新架构模式

2012-07-25王志华

计算机工程与设计 2012年7期
关键词:数据源页面架构

赵 伟,王志华,周 兵

(1.郑州大学 软件技术学院,河南 郑州450002;2.河南省高等学校信息网络重点开放实验室,河南 郑州450052)

0 引 言

随着基于浏览器/服务器模式的WEB系统的日益普及,此类系统的可扩展性差、代码复用率低等问题也屡见不鲜了,因此在软件系统的开发生命周期中,选择一个合适的软件架构对于系统及其同构子系统是极其重要的因素[1]。目前采用 .NET框架技术开发成为开发WEB系统的主要选择,首先是因为用户的操作系统平台大多都是Windows,再加上低廉的成本和微软数据库系统SQLSERVER无缝连接等原因让.NET架构的应用越来越广泛。其次应用.NET框架的N-层技术开发的软件系统可以在一定程度上提高代码复用率,并且使系统具有更强的应用性、开发性和扩展性的 优 势[2]。

1 常见的基于.NET技术的架构模式

1.1 五层架构模式

.NET的五层架构模式如图1所示。

在该架构模式中,共分为五层,这五层从上到下依次为用户界面层 (UI layer)、门面层 (Fa ade layer)、逻辑层(logic layer)和数据访问层 (data access layer)以及数据存储层 (data stored layer)。用户界面层是由浏览器向系统提供访问的用户界面;门面层是依据门面模式的原理,为逻辑层和数据访问层的全部调用提供一个统一的高层次的接口。逻辑层则实现了系统的具体业务规则并且解决系统功能的扩展性问题。而系统中数据的存取是通过数据访问层来实现,数据访问层是系统中数据交互的桥梁,该层不但通过存储过程与下层的数据存储层交互,而且以数据对象CSID(跨层调用标准接口数据集)的形式将数据返还给上层。

图1 .NET的五层架构模式

1.2 四层架构模式

目前流行的是.NET的经典的四层架构模式[3-4]。如图2所示。

图2 .NET的经典的四层架构模式

UI层,即用户界面层 (user interface layer)是浏览器为应用程序提供访问界面,这层主要是向用户提供界面上的操作和实现各种页面控件的事件处理。业务逻辑层(business logic layer)为用户界面层提供对业务规则的统一调用接口。数据访问层 (data access layer)为业务逻辑层提供数据服务。其功能主要是负责数据库的访问。具体就是实现对数据库表的Select、Insert、Update、Delete的一些基本操作,结果可以返回数据集,每层主要是通过CSID实例的形式返回给上层。最后一层是DataBase,对数据进行封装,并且与数据库实体映射。

1.3 两种架构模式的分析

分N层结构实现网络服务的方法目前在业界已经广泛应用,所划分的层次视具体应用而定,比较上述两种业界广泛采用的架构模式我们可以发现,两者的区别主要体现在逻辑层和数据访问层,UI层没有发生变化,仍然是以页面为中心的WEB模型,虽然对于小型WEB系统的开发开说,可以实现快速开发和一定程度的代码复用,但是对于大型的业务逻辑复杂的系统的设计和维护就有一定的局限性了。再加上 “code-Behind”技术造成了用户界面层与业务逻辑层的耦合度过高,不但导致页面显示和流程控制和的可分离性差,使其难以满足复杂多变的用户需求;而且也导致了页面层与业务逻辑层的代码复用率低。

现在很多的应用程序都可以基于MVC(model-view-controller)模式进行设计与实现[5-6],包括 Web应用程序框架。ASP.NET的架构模式也提供了对 MVC的实现机制[7-8],在ASP.NET的架构模式中,主要是其Page Controller模式来实现MVC模式,视图由表示层的aspx文件实现,模式由上面所述架构中的业务逻辑层来实现,每个页面都有一个控制器,没有核心控制器[9]。该机制实现MVC模式具有简单易用、页面和控制器功能划分清晰、页面、控制器和业务逻辑层之间的耦合度较低等优点。但是同样对于大型的复杂系统来说,由于缺少一个强大的核心控制器,无法合理有效地的统一控制,集成一个完整的系统。

综上所述,本文以ASP.NET的多层架构技术为基础,并对ASP.NET框架中的MVC实现机制进行扩展研究[10],提出一种新的MVC模式实现架构,论述其组成结构和运行机理,并以样本选货厅系统为例阐述说明各组成模块的实现过程。

1.4 基于MVC模式和.Net技术的新架构模式

新的架构模式分为五层,从上到下依次是UI Layer、Control Layer、Business Layer、DataAccess Layer和数据库(DataBase)。新的MVC架构模式图如图3所示。

图3 基于.Net技术和MVC模式的新架构模式

2 新模式总体架构与时序图

2.1 新模式总体架构

在新的架构模式中,视图就是页面表示层 (UI layer),也就是我们Web应用的外观显示,为客户端提供对应用程序的访问界面,负责接收用户的输入、将输出呈现给用户。

控制层 (control layer),这层是相对于.NET经典的三层架构模式新加的一层,主要目的是连接模式层和UI层,是模式层和UI层之间的桥梁。该层主要由自定义PageBase类、Parameter类以及系统日志记录组成。自定义PageBase类,继承了System.Web.UI.Page类,并且将各种初始化和控制函数重新封装,以满足MVC模式中的核心控制器的要求。系统的所有页面都继承自定义的PageBase类,所有符合要求的用户请求都要先转发到该类进行处理,再由该类分发给各个页面的Page Controller进行处理。Parameter类是用来保存每张画面的数据,并向模式层部分中的业务逻辑层的Facade类传递数据对象的类,所以与视图层中的每张页面一一对应。另外我们也可以利用控制层来记录系统的操作日志。

模式层由两层组成,一层是Business Layer即业务逻辑层,另一层是DataAccess Layer即数据访问层。业务逻辑层,一般在该层中进行业务逻辑的处理,业务逻辑层通过CSID的形式与数据访问层、控制层进行交互,业务逻辑层的设计是整个系统设计中的关键问题。业务逻辑层中核心部分是Facade类,负责完成与具体业务密切相关的业务逻辑处理。数据访问层,该层主要是向业务逻辑层提供数据服务,具体在该架构模式中,它包括三部分:第一部分是数据实体DataSet类,该类的作用是以强类型的Dateset在各层之间传递数据信息。当数据库中的表的结构等如果发生改变时,只需要对数据访问层的代码进行修改就可以了,不需要再修改其它的地方。第二部分是数据源访问管理类DBManager,由于数据访问层用于存放应用应用系统的数据信息,一般采用关系型数据库进行存储,所以DBManage类屏蔽了系统对DBMS的依赖性,利用DBManage类可以与来自SQLServer、Oracle、DB2等不同的数据库相连,第三部分是数据访问操作类DAO类,它将对数据表的Select、Insert、Update、Delete的一些基本操作封装在DAO类中。

2.2 架构的时序图

新架构的时序图如图4所示。用户需要视图层显示相关信息,通过HandleEvent事件传递到控制层,控制层先对画面的数据进行封装,封装后调用模式层中Fa?ade中的方法,并通过模式层中DAO和数据库发生交互,将查询的结果以DATASET的形式传递到控制层,控制层将数据封装后,根据用户的需求最终显示画面并通知用户。

3 具体实现

3.1 图书样本选货厅系统架构图

图书样本选货厅系统架构如图5所示。

本文以某书店的图书样本选货厅系统为例进行说明,该系统主要是实现客户在进入仓库的前提下,通过RF终端扫描图书样本的条形码,下采购订单,仓库接收到订单信息后,快速准确的配货并最终发货。客户可以对订单中的信息进行查看、添加、修改和删除操作。该系统主要有订单管理模块、样本管理模块、财务管理模块、基础数据管理4个模块组成。该系统在实际编程中使用了Microsoft.NET平台和ASP.NET技术,后台数据库采用Microsoft SQL Server 2005作为数据库服务器,客户浏览器使用Microsoft Internet Explorer。

样本选货厅系统的架构图包括五层,自顶向下分别为UI Layer、Control Layer、Business Layer、DataAccessLayer和数据库Microsoft SQL Server 2005。其中UI Layer的数据来源于两个途径:Form和Device,主要是针对样本选货厅系统特殊的业务流程而言的,样本选货厅里客户下订单是通过RF终端扫描图书样本的条码和输入的数量来生成订单的,所以就在最上面是系统的数据来源Device和Form Screen。Control Layer根据UI Layer得到的数据控制页面间的流转以及最终的VIEW显示,同时还有PageBase类和Parameter类。Business Layer是负责系统业务逻辑的处理,而DataAccess Layer包括三部分一部分是DAO类,该类封装了对数据库的操作行为,另外一部分是DATASET类,该类对应于系统的数据库中的所有表结构,最后一部分是Dbmanager类,负责理对数据源的连接服务。下文结合图书样本选货厅系统中的图书样本查询功能来说明新框架中各个部分的具体实现方法。

图4 新架构的时序图

图5 图书样本选货厅系统架构

3.2 视图层的实现

视图层的实现是依据客户需求构建aspx页面的过程。

3.3 控制层的实现

3.3.1 PageBase类的实现

PageBase继 续 于 System.Web.UI.Page类,其 中 的PageLoad()是页面初始化的重要事件,同时PageLoad()是该系统自动的核心控制器,由它来统一处理用户请求,除了初始化页面的一些基本代码由系统自动产生,我们根据最终显示的要求,通过SetDocumentTitle(),Set-MultiLanguage ( ), ProcessControlsWithStatus ( ),SetValue-ForDataControls(),GridView ()等方法来分别控制画面最终的显示结果。SetDocumentTitle()用于控制显示画面的标题,最终显示在IE浏览器的Title栏中。Set-MultiLanguage()设置画面中相关需要表示为多语言的控件的多语言属性。ProcessControlsWithStatus()根据画面状态,设置画面上的控件的状态。例如:控件是否可以被编辑或者控件是否可见等状态。SetValueForDataControls()根据Parameter设置画面上控件的值。如果控件只需要设置一次值,如:列表类控件 (DropDownList,ListBox等)的数据绑定,则应该在Not IsPostBack代码块中进行处理。GridView ()绑定到DataTable,通过GirdView控件的形式在页面中显示数据。

3.3.2 Parameter类的实现

由于Parameter类中的数据与页面中的数据也是一一对应的,下文以图书样本的查询画面为例来说明Parameter类具体的实现方法。图书样本的查询画面中有3个检索条件,分别是ISBN、书名和出版社。该画面对应的Parameter类的代码如下所示:

public class ParameterT01A{

#region fields,properties

private string _BookNo;

public string BookNo

{ get{return _BookNo;} set{_BookNo=value;} }

private string _Book Name;

public string BookName

{ get{return _Book Name;} set{_Book Name=value;} }

……

#endregion fields,properties}

将画面中的数据通过Parameter类的形式进行封装,并且用Parameter作为参数,传递到业务逻辑层的fa ade类,最后进行数据的查询,并最终将查询的结果以Parameter类的形式传递回画面,显示给用户。这样做最大的一个优点就是极大地提高了系统的可扩展性和提高代码的复用率。因为如果将画面由WebPage换成Winform,不需要修改业务逻辑层的Facade类,只需要修改Winform中的Parameter类。

3.4 模式层的实现

3.4.1 业务逻辑层

public ParameterT01CSearchBooks(ParameterT01A t01a)

{//实例化一个BookDAO对象,并连接数据源

BookDAO daobook=new BookDAO (dbman)

//调用BookDAO中的方法Query根据条件在数据库中查询结果。

DataSetBook.BookDataTable bookTable = daobook.Query (t01aBookNo,t01a.BookName,t01aPublishinghouse);

//查询后的结果绑定于gridview并显示

t01a.GridViewDataSource=bookTable;

//关闭数据源连接

dbMan.Close ();

//返回parameter类的实例化对象t01a;

return t01a;}

3.4.2 数据访问层

3.4.2.1 数据实体DataSet类

在.net环境下,DataSet类是对数据库表的抽象,包括与数据库表字段相对应且名称一致的成员变量以及设置、读取变量值的set和get方法等。本项目中使用的是定制的DataSet,其优点是可以按照客户具体的业务需求自定义DataSet,有助于从面向对象的角度实现该系统。和其它使用ASP.NET进行数据库信息系统开发不同的是,我们的Dataset是一些通过Visual Studio设计器自动产生的,通过拖放操作来生成Dataset类,并通过设计相应的属性来满足我们的需要。我们在该系统开发中使用数据库时,数据一般被表示成不同的实体,如Book、Customers等。为了和这些数据一起工作,需要将它们以实体的形式封装。如可以为每个实体写一个定制的类。当然,为了方便处理实体对象,自定制DataSet中的字段可以是和数据库中的某个表字段一一对应,也可以是对数据库中的多个表中的字段的抽象重新组合,甚至一个数据集中可以包涵多个数据库表对象。通过Visual Studio设计器自动产生的Dataset,在该项目中我们可以非常轻松地对数据进行增删改操作。从本质上讲,我们创建了一个Dataset,就相当于创建了一个自定义的类。这和我们手工写的类一样,所不同的是,这是使用可视化的设计器来完成的。同时这个Dataset会和数据库的schema保持同步。而Visual Studio的代码产生器将为我们完成所有的底层操作。另外,由于这些Dataset从ADO.NET的相应类型继承,因此,它们可以继承丰富的数据操作功能,同时这些功能还和ASP.NET的数据绑定相结合使用,极大的减少了手工写代码的工作量,提高了开发效率和开发进度。

3.4.2.2 数据源访问管理类 DBManager

在该系统中通过DBManager.cs类来管理对数据源的连接服务。在DBManager.cs中有一个方法getConnection,作用是得到连接字符串。

public static SqlConnection getConnection()

{//声明连接字符串

String settings;

//使用用SqlConnection连接数据库

SqlConnection connection;

//从Config文件中读取连接字符串

settings = DAL.Properties.Settings.Default.testConnectionString;

String connectionString=settings;

connection=new SqlConnection

(connectionString); }

3.4.2.3 数据访问类DAO类的实现

我们对数据表的Select、Insert、Update、Delete的一些基本操作封装在DAO类中。例如:表查询操作。

public static DataSetBook.BookDataTable Query

(string bno,string bname,string bpublishinghouse)

{ SqlCommand selectCommand=new System.Data.SqlClient.SqlCommand ();

selectCommand.Connection=conn;

selectCommand.Transaction = transaction;

selectCommand.CommandText= @"SELECT *

FROM book where BooNo LIKE Bno and BookName LIKE bname and Publishinghouse LIKE bpublishinghouse";

selectCommand.CommandType =System.Data.CommandType.Text;

DataSetBook BookDataTable table=new BookDataSet.BookDataTable ();

new SqlDataAdapter (selectCommand).Fill(table);

return table; }

3.4.2.4 具体实现步骤

(1)设置数据源访问字符串。

<connectionStrings>

<add name="BookConnectionString"connection-String="Data Source=192.168.0.210;Initial Catalog=book;Persist Security Info=True;User ID=sa;Pass word=sa"providerName="System.Data.SqlClient"/>

</connectionStrings>

(2)得到数据源访问字符串,.打开数据源连接,进行数据库的查询操作,最后关闭数据源连接。

//通过DBManager类中的getConnection得到数据源访问字符串。

SqlConnection conn=getConnection ();

//打开数据源连接

conn.Open ();

//进行数据库的查询操作。

SqlTransaction transaction=conn.BeginTransaction ();

//调用BookDAO中的方法Query根据条件在数据库中查询结果。

DataSetBook.BookDataTable bookTable = daobook.Query (BookNo,BookName,Publishinghouse);

transaction.Commit();

//关闭数据源连接。

conn.Close ();

4 结束语

MVC模式在目前是一种应用比较普遍的设计模式,本文提出新的模式融合MVC的设计思想和.NET架构模式的优点,并成功地将此种架构模式应用于样本选货厅系统的架构设计中,通过项目实践证明该架构模式更加明确了各个层次的职责,大大减少了各个层次之间的藕合度,同时也提高了系统的可扩展性和系统的可移植性,新架构模式比较适合大型的以及业务逻辑复杂的系统,为其它具有同种结构的应用系统的研发提供了一定的参考。

[1]Shaw M,Clements P.The golden age of software architecture[J].IEEE Software,2006,23 (2):31-39.

[2]ZHU Chuanbao,LI Congdong.Information management system of electric power capital construction based on.Net platform [J].Computer Engineering,2006,32 (14):255-257(in Chinese).[朱传宝,李从东.基于.Net平台的电力基建信息管理系统 [J].计算机工程,2006,32 (14):255-257.]

[3]LUO Jing.Comment on N tier architecture based on.Net [J].Computer Engineering and Design,2006,27 (18):3467-3469(in Chinese). [罗静.基于 .NET的 N层体系结构的探讨[J].计算机工程与设计,2006,27 (18):3467-3469.]

[4] WANG Wen-fa,MA Yan,LI Hong-da.Four-tier structure based on.NET and its application in integrated information system [J].Computer Engineering and Design,2009,30 (4):912-914(in Chinese).[王文发,马燕,李红达.基于.NET的四层结构及其在综合信息系统中的应用 [J].计算机工程与设计,2009,30 (4):912-914.]

[5]LIU Ning,LU Rongguo,MIU Wansheng.Continuous software abstracting evolution from MVC architecture pattern to MVC architecture framework [J].Computer Engineering,2008,34 (4):107-110 (in Chinese). [刘宁,陆荣国,缪万胜.MVC体系架构从模式到框架的持续抽象进化 [J].计算机工程,2008,34 (4):107-110.]

[6]SUN Zhao-yun,SUN Xiang-ke,SHA Ai-min.Design and implementation of teaching and management systems based on MVC [J].Computer Engineering and Design,2009,30(23):5541-5543 (in Chinese). [孙朝云,孙向科,沙爱民.基于MVC架构网络教学管理系统的设计与实现 [J].计算机工程与设计,2009,30 (23):5541-5543.]

[7]GONG Wei-hua,WANG Chen-guang,YU Huan-jun.Design of company management information system based on MVC and.NET [J].Computer Engineering and Design,2007,28(9):2142-2144 (in Chinese).[龚薇华,王晨光,俞欢军.基于MVC模式和.NET的公司内部管理信息系统设计 [J].计算机工程与设计,2007,28 (9):2142-2144.]

[8]LI Yuan,CHEN Shi-ping.Application of MVC design pattern in ASP.NET [J].Computer Engineering and Design,2009,30 (13):3180-3184 (in Chinese). [李园,陈世平.MVC设计模式在ASP.NET平台中的应用 [J].计算机工程与设计,2009,30 (13):3180-3184.]

[9]Shams Mukhtar.Applying robustness analysis on the modelview-controller(MVC)architecture in ASP.NET framework,using UML",available [EB/OL ] .http://www.cod,eproject.comL/aspnet/ModelViewController.asp,accessed,2006.

[10]WANG Ya-lin,ZHOU Ying,LEI You-cheng,et al.Shunting trip plan assistant making system based on MVC [J].Computer Engineering,2010,36 (21):257-259 (in Chinese).[王雅琳,周颖,雷友诚,等.基于MVC的调车作业计划辅助编制系统[J].计算机工程,2010,36 (21):257-259.]

猜你喜欢

数据源页面架构
基于FPGA的RNN硬件加速架构
刷新生活的页面
答案
功能架构在电子电气架构开发中的应用和实践
让Word同时拥有横向页和纵向页
基于云服务的图书馆IT架构
Web 大数据系统数据源选择*
WebGIS架构下的地理信息系统构建研究
基于不同网络数据源的期刊评价研究
基于真值发现的冲突数据源质量评价算法