通用商务平台的开发
————崔家钊
2004-7-1
参考文献:1.《框架设计模式》
2. 我的O/R Mapping实际开发经验之谈 catguy(原作)
一、前言:
商务平台我们暂且称它为maxplatform,所谓平台实际上也就是个框架,既然它将作为一个框架展示在我们的面前,那么我们对它的开发当然要遵循框架的设计模式。
首先我们引入框架的定义:“框架就是一组协同工作的类,它们为特定类型的软件构筑了一个可重用的设计”。
下面我们就先来看一下我们将要开发的这个平台具有哪些特点和潜力值得我们去研究
◆可重用是maxplatform的第一个特点。
我们要构筑的这个通用的商务平台就是一个可重用的,能够自己管理自己,自己开发自己,而且在这个平台上可以开发出各种不同的服务来提供给我们用户,这是我们快捷、高效地开发各种软件的保证。
◆ 服务是maxplatform的最大特点。
Maxplatform将是一个能够提供各种商业服务的框架,这里所提到的商务服务也就是各种软件的开发,这些软件都是在此平台的基础上开发的,它们也成为maxplatform所提供的服务的一部分。
它的服务可以从两个方面去理解:首先从技术方面,上面提到我们的开发是基于.NET技术的,.NET是 Microsoft 面向 XML Web services 的平台,我们就是要利用.NET的这个特点来实现我们的平台;其次从用户的角度,用户使用我们的maxplatform能够根据自己的需要来选择他所需要的服务,或者定制他想要的服务,而不必考虑其后台实现的具体技术,这样我们的平台也就符合了面向服务架构(SOA)的原则,这种强大的灵活性将会给用户带来巨大的好处。
◆可扩展性
Maxplatform将提供两种服务:一种是系统级的服务,平台本身所具有的,我们称它为moduler,它是纵向的,例如各种处理;另一种是应用级的服务,也就是为用户提供的服务,我们称它为handler,它是横向的,例如用户的各种请求。我们的平台不仅可以无限的扩充moduler,也可以无限的扩充handler,此时平台发挥的作用就是要把这写moduler和handler捆绑起来,成为一个稳固的、健壮的、而且是可配制的十字结构。
◆界面无关性
我们的平台与客户端只有一个通道,那就是XML Web services,客户端只有通过这个通道才可以与平台交互,在通道中要传递的信息很简单,那就是XML,而xml作为一种通用的标记语言,是我们的平台可以与不同的客户端交互的基础,界面的无关性又为我们将来实现智能客户端(Smart Client)创造了条件。
二、概述:
前面我们简单的介绍了一下maxplatform的一些特性,那么下面我们就来讨论一下怎么样去实现这样一个平台呢?
在我们构筑这个框架之前,我们有一点需要明确:框架是介于类库和应用软件这两个极端之间的。试图覆盖过多功能的框架反而会变成类库,而如果框架没有足够的扩展性那么它就成为了一个应用软件,所以说框架的开发很难把握,不过我们只要满足前面所提到的特性,那它就是一个很好的框架,就是我们想要的平台。
首先我们要给框架分清层次,只有建立起清晰的层次,层次之间实现松散的耦合,我们的平台才是健壮的,这也是我们在开发软件过程中对软件工程的应用。我们把平台结构划分成六层,下图可以将我们划分的层次很清晰的展现出来:
第一层是UI层,也就是用户的客户端;
第二层就是Web Service,它是client和server通讯的唯一通道;
第三层是RequestProcess层,它是框架的核心层,来处理用户的请求,它关系到整个框架的稳固性;
第四层我们称它为Business层,这个层就是我们平台的服务层,我们所能够给用户提供的所有应用级的服务都在这个层上;
第五层就是数据存储层O/RMapping,我们用它来实现数据与数据库的分离;
第六层就是DataBase了。
UI层和DB层我们就不详加讨论了,我们主要实现的是中间四个层次。
● Web Service 层:
它既然作为client和server通讯的通道,那么中间必定要有一种通讯方式,也就是传递的信息,而且这种信息既要能够被client识别又要能够被server识别。我们定义的这个通讯方式就是XML,所有需要传输的数据,都被组装成我们自己定义的XML格式,在各个层次之间传递。客户端只需要连接到Web Service,通过这个通道传输XML,那它就可以和平台内部交互,向平台内部发送请求,然后平台将处理结果再通过service传输给UI。这就是Web Service层所完成的使命。
● RequestProcess层:
在这一层里,体现了我们框架的核心思想。我们要开发大量的服务来提供给用户,那么这些服务是怎样被用户所使用呢?我们又怎么知道每一个用户都使用那些服务呢?又怎么让平台自动去处理用户所发出的请求呢……下面我们就去解决这些问题。
我们要开发什么样的服务?用户怎样使用平台所提供的服务? 前面提到,我们所提供的服务分两种,一种是moduler,平台自身所具有的;一种是handler,它就是用户的需求。
既然moduler是平台本身所具有的,那么也就是说每一个用户在成为我们的服务对象后也同时具有了这些系统级的服务。比如用户管理,权限分配,即时通讯等服务。
用户只有注册了他所需要的服务(handler)后,他才有权限去使用这些服务,否则的话,他的服务请求平台将不会去处理。Handler就比如定单的处理(order management),Send Email ,SMS 等等.
这些服务都被编译成一个个单独的类文件,我们需要的时候就去调用这些dll。
平台怎样自动处理用户的请求? 我们的平台能够自动识别用户发送的请求,如果此用户已经注册了可以处理这个请求的服务,那么平台就可以自动找到这个服务,然后调用这个服务去处理请求,再将结果返回给用户,而不比去人为的干预这个动作,否则的话我们的平台将失去灵活性和可重用性,我们建立平台的目的也就是为了能够最大限度的减少我们的重复开发。
那么我们怎么样才能实现这种功能呢?这里我们需要引入自动加载的概念。
所谓自动加载也就是自己开发好的服务能够自动的让平台去调用。而不去认为的干预这个动作。
服务与服务之间是怎么通讯的? 我们所提供的服务都是独立的,之间互不联系的。而我们要为用户所提供的却是一个完整的服务体系,比如一个网上销售系统,我们不能只给用户一些简单的服务模块,象商品管理,定单管理,发票管理等,我们就要为这些服务模块之间建立起联系,让他们能够协同工作,这就是复合请求。那么我们怎么样才能实现用户的复合请求呢?既然服务与服务之间是没有联系的,那就增加一个逻辑处理,作为服务与服务之间联系的一个纽带,用它来处理不同的商务逻辑,而这个处理文件是我们根据用户的实际需要去编辑的,并且是没有经过系统编译的源文件,程序暂时无法执行的,那么我们怎么样让程序去自动执行这个逻辑处理文件呢?这就需要我们提供一个可以自动编译并执行源文件的功能,这就用到了动态编译。这样我们的平台就具有了灵活的逻辑处理功能,每个用户有他自己的商务逻辑,这些逻辑之间是互不影响的,而且是可修改的。用户的请求要先经过逻辑处理,然后由逻辑去调用服务去处理它的请求,让服务与服务之间协同工作,达到用户的目的。
● Business层:
在这一层中存储的就是所有的handler和逻辑处理源文件,在上一层中所调用的所有的服务和逻辑处理都存在于这一层。
这样我们做的大量的工作就只是开发不同的handler和逻辑处理,不用再去管其他的东西,平台会自动的把这些handler和处理加载进去,从而省去了我们大量的开发时间。
在这里我们还要将一个思想添加到平台中来,那就是为用户提供智能化的服务。要实现这个功能我们就要引入工作流的概念。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。“自动”(automate)是工作流的一个特征,但这主要是指它自动进行的特征,而不是说没有人的参与。Workflow Management是一个真正的“人-机”系统,用户是系统中的基本角色,是直接的任务分派对象,用户可以直接看到电脑针对自己列出的“任务清单”,跟踪每一项任务的状态,或继续一项任务,而不必从一个模块退出,进入另一个模块,搜索相应任务的线索。前者是面向功能或对象的,而后者是直接面向用户的。这样,用户的任务分派和任务的完成状态,可以被最大程度地电脑化和受到控制。这种依靠计算机来使业务活动自动运行的表现,就是我们要实现的智能化,把Workflow Management作为平台能够提供的一个服务,这样我们的平台就很完善了。
● O/R Mapping层:
O/R Mapping就是Object-Relational Mapping(对象-关系映射)。它是用来干什么的呢?它是用来将数据库映射到一个持久化类。O/R Mapping就是在对象(Object)和关系数据库(Relation)建立数据对应及转换的途径,把对表直接进行的操作,变成对持久化类的属性和方法的直接操作。它目的是让开发人员主要关注业务逻辑以及对象,而甚少关心关系数据的维护,充分发挥面向对象开发的优势,由于O/R Mapping把表的操作完全封装在类的层次,使表跟源程序耦合性大大的降低。能明显提高项目结构的扩展性和柔韧性,更加容易修改和升级。我们将O/R Mapping应用到我们的平台中来的目的也就在于此。
有关ORM的东西很多,象wilsonORMapper,微软的ObjectSpace等..我们直接就可以拿来用.它将会给我们的开发带来很大方便,节省更多时间去关注业务逻辑的实现。
到此为止我们的框架基本上已经构筑起来了,剩下的工作就是对的完善和优化,开发更多的服务提供给用户。平台的实现不仅方便了我们以后的开发,而且随着平台功能的不断完善,我们可以把它提供给我们的合作伙伴,让更多的人去使用它,对我们或者别人这无疑都是很大的一个收获。