摘要:ECO是Borland/CodeGear在.NET平台下实现出来的,根据模型驱动开发(Model Driven Development,MDD)为核心发展出来的软件架构;而Ajax作为Web开发的热点,在提高数据交互,改善用户体验等方面发挥着重要作用。本文通过用户注册验证的设计,说明了通过Web服务,ECO和Ajax二者之间能实现有机的结合,从而让开发人员真正领略到高效的开发能力,同时带来更好的用户体验。
关键词: ECO; Ajax;Web Service;.NET
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)14-20848-04
1 引言
随着高生产力和高品质软件的要求标准不断的提高,“简化与快速开发”已成为软件开发人员追求的重要目标。在“快速开发”的同时,提供丰富的、可交互的和个性化的用户体验,对提高Web应用程序开发的品质和效率,具有重要的现实意义。
2 ECO与Ajax相结合的模式
2.1 ECO开发架构
ECO(Enterprise Core Objects)是根据模型驱动开发(Model Driven Development,MDD)为核心发展出来的技术,并且结合OR Mapping、图形用户界面绑定、对象服务构架以及许多其他丰富的功能而形成的,在.NET平台下实现出来的软件工程。
2.1.1 模型驱动开发(Model Driven Development,MDD)
MDD的基本构想是开发人员应该专注于设计良好的业务逻辑模型,并且把业务逻辑撰写在模型中。一旦模型设计完成之后,MDD即可提供工具自动地把业务逻辑模型对映到开发人员使用的技术中。MDD提供了使用模型来直接引导理解系统、设计、建立、部署、动作、维护和修改系统的流程。在这整个开发过程中,都是以模型来驱动的。一个ECO系统的开发从建立模型、设计和开发模型,到撰写Delphi/C#程序代码都与系统模型脱离不了关系。
2.1.2 UML和OCL
UML(Unified Modeling Language)和OCL(Object Constraint Language)都是由OMG(Object Management Group)定义的标准,也都是组成MDD标准的子标准之一, 对MDD的成功具有关键性的作用。ECO开发中,使用UML来专注于建立业务的平台无关模型(Platform Independent Model,PIM),使用OCL来选择和处理业务逻辑对象和业务逻辑。
在UML2.0的标准规范中,OCL是作为附加的语言(Add-on Language)来进行面向对象分析/设计之用的。由于OCL是附加的UML机制,所以被用来撰写业务逻辑模型中的业务规则、限制条件以及定义查询等工作之用。OCL又是一门形式语言,因此使用OCL来定义、撰写这些模型相关的信息的好处是既清楚又不会造成模糊不清的定义。OCL可以取代SQL在ECO应用系统中让开发人员处理的业务逻辑对象,也可使用在ECO类图中定义的业务逻辑,这样,开发人员就无须再使用Delphi/C#程序代码重复撰写这些业务逻辑,可以说,使用ECO来开发应用系统,OCL是除了Delphi/C#语言之外第二个最重要的语言。
2.1.3 使用ASP.NET之WEB架构的ECO应用程序
ECO的开发方式是让开发人员设计完善的用户需求业务逻辑模型,不仅定义了类、方法和特性,更重要的是它详细地定义了一个应用系统中类之间的关系,这样一来,开发人员只需要遵照模型的定义就可以专心地撰写程序代码,因此,可以简单地说ECO能够达到“模型即程序,程序即模型”的地步。
ECO 提供了强大的ASP.NET 开发能力,它能够和.NET内建的UI组件搭配在一起,并且重新整理高阶的服务在一组易于使用的接口中,这样一来,不但可以让开发者非常方便上手,也符合目前面向对象框架改为使用接口导向(Interface Oriented)的设计架构。在这种ECO ASP.NET 架构中,除了能够使用所有ASP.NET提供的各种组件和服务之外,也能够使用所有ECO的功能和服务。ASP.NET 应用程序同样通过EcoSpace 执行我们在设计时期设计的业务逻辑模型,然而,由于ASP.NET 应用程序会有许多客户端同时存取使用,因此ASP.NET 应用程序需要和后台的数据库连接,并需要使用ECO持久化映像同步器(PMapperSynchronizer)来同步每一个客户端对于对象的修改,以保证后台数据库之中数据的一致性。执行架构如图1。
2.2 AjaxPro.NET框架
AJAX是Asynchronous JavaScript and XML(异步JavaScript和XML)的缩写,综合运用Javascript、XHTML和CSS、DOM、XML和XSTL、XMLHttpRequest的技术,AJAX的原则是“按需取数据”,可以最大程度的减少冗余请求和响应对服务器造成的负担,它使用XMLHTTP对象发送请求并得到服务器响应,在不重新载入整个页面的情况下用Javascript操作DOM实现页面局部更新,这种更新是瞬间的,从而带给用户较好的体验。
随着Ajax技术在WEB程序中的应用,Ajax框架(或称Ajax库)有如雨后春笋般令开发人员眼花缭乱,但是面对如此之多的Ajax框架,如何选择适合自己项目的Ajax框架,特别是在和ECO相结合的应用系统中,显得更为重要。
AjaxPro.NET是一个优秀的Ajax框架,它做为Ajax技术在.Net框架下的实现,作者Michael Schwarz采取了一种封装效果相当棒的技术:将客户端处理XML、事件调用方式都封装在2个Javascript文件中(AjaxPro.prototype.js 和AjaxPro.core.js),同时将这2个重要文件以资源的形式编译于dll中,在处理客户端请求其自定义的.ashx文件时,返回这两个文件。在实际应用中只要添加其DLL引用并进行简单的配置, 就可以非常方便的在客户端直接调用服务端方法,实现验证目的。
2.3 Ajax通过WebService整合ECO系统
ECO功能强大,而且非常符合开发习惯,当使用ECO开发应用程序时,开发人员可以专注于设计要解决的问题模型,一旦这个模型定义、开发完毕之后,整个应用程序就几乎已经完成了大半的工作,因为ECO在应用程序运行时会执行开发人员设计的模型来解决客户的问题。这样开发人员可以避免花费很多的开发时间于琐碎的细节之中,而能集中精力于设计完善的业务逻辑。
Ajax作为构建Web应用的一种方法,它带给访问者完全不同的浏览感受,为客户端提供了强大的GUI能力,通过ECO和AJAX的有机结合,开发人员可以在WEB应用程序中使用完善的业务逻辑,并将良好的用户体验展现在使用者面前,那么在ECO与Ajax相结合的模式下,服务器端的开发应该是什么样子,应该用什么样的框架支持这种“只向浏览器返回数据”的服务请求,其实这时很需要一个全新概念的服务器端架构,本人认为这种架构应该基于WebService。
Web Service主要是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。Web Service所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议)、WSDL等,所以Web Service可以在任何支持这些标准的环境(Windows,Linux)中使用。Webservice的一个最基本的目的就是提供在各个不同平台的不同应用系统的协同工作能力。
通过Web服务,Ajax技术可以与ECO应用程序很好进结合在一起,二者可通过如图2的模式进行相结合。
3 结合ECO与Ajax的用户注册验证设计与实现
在各种网络服务中,新用户注册随处可见,新用户进行注册时,系统应判断注册的用户名是否已存在,ECO系统中如何在不重新刷新页面的情况下进行验证,就须通过使用Web Service方法。Ajax与ECO相结合下的用户注册验证的实现主要有以下几个步骤:
(1)首先下载AjaxPro.NET 组件。并将AjaxPro.2.dll引用到项目中;
(2)在Web.config文件中配置AjaxPro框架;
(3)使用ECO设计器界面以可视化的方式设计注册用户类(Register类有:UserName、Password、Email等注册需要的属性),然后通过ORMapping在连接的数据库中产生必要的数据结构;
(4)创建ECO WebService,在服务器端撰写Web服务方法;
unit WebService1;
……
[WebMethod]
function GetUserCount(Uname:string): integer;
……
function TWebService1.GetUserCount(Uname:string): integer;
var
OclService: IOclService;
ResultElement: IElement;
oclstr:string;
begin
OclService := EcoSpace.GetEcoService
oclstr:="Register.allinstances->select(UserName="""+Uname+""") ";
ResultElement := OclService.Evaluate(oclstr);
Result := ResultElement.GetAsCollection.Count;
DoneWithEcoSpace;
end;
将调试后的Web服务方法通过“Web Reference”添加引用到调用的项目中。
(5)在ECO ASP.NET Forms中注册使用Ajax框架,同时加入相关的ECO组件,设计调用WebService的方法;
public
function IsNameExist(sUname:string):boolean;
function IsUserExist(Uname:string):boolean;
[AjaxPro.AjaxMethod]
function GetReturnInfo(s:string): string; //声明客户端JavaScript可呼叫的方法
[AjaxPro.AjaxMethod]
function GetInfo : string; //声明客户端JavaScript可呼叫的方法
……
procedure TRegist.Page_Load(sender: System.Object; e: System.EventArgs);
begin
// TODO: Put user code to initialize the page here
Utility.RegisterTypeForAjax(typeof(Default.TRegist));
end;
function TRegist.IsUserExist(Uname: string): boolean; //调用WebService
var
ws:TWebService1;
begin
ws:=TWebService1.Create;
if ws.GetUserCount(Uname)>0 then Result:=true else Result:=false;
end;
function TRegist.GetReturnInfo(s: string): string;
begin
if(IsUserExist(s)) then Result:="2";
end;
(6)撰写客户端访问ASPX页面的JavaScript代码,使用XMLHttp呼叫Ajax方法。
function IsUsernameExist_callback(res)
{var msg = document.getElementById("lblMessage");
var bRet = res.value;
if (bRet == "2")
{msg.innerHTML = "用户名已存在!";
msg.style.color = " red ";}
else
{msg.innerHTML = "用户名可以使用!";
msg.style.color = "green"}
}
</script>
……
4 结束语
本用户注册验证程序在RAD Studio 2007下调试成功。本文通过这一常用实例的实现,提出一个在.NET平台下快速开发Web程序的基本模式:Ajax技术可以通过WebService和ECO应用程序进行结合,充分实现“快速开发”与“良好用户体验”,较好地完成Web应用软件的开发。
参考文献:
[1] 李维. Delphi MDA/DDA程序设计──使用ECO[M]. 电子工业出版社,2007.
[2] Xavier Pacheco. Delphi for.NET Developer"s Guide[M]. 机械工业出版社,2005.
[3] 柯自聪. Ajax开发精要──概念、案例与框架[M]. 电子工业出版社,2006.
[4] 蔡宏. Delphi 2006 for NET开发技术原理与实践教程[M]. 电子工业出版社,2007.
[5] 赵建华. MDA与可执行UML[M]. 机械工业出版社,2006.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文