维护性高。物理分布灵活。开发的并行性高。
举个例子:在一个线缆销售公司的订单处理系统中要录入订单,并保存订单。有以下要求:订单的录入界面要随所订线缆的种类不同而不同,以便于快速录入。能否开放该新订单取决于该订单的总金额和该订单的销售员的金额授权以及库存情况。如果销售员金额权限不够,要提示请销售经理进行授权审批。
这里: 订单的录入界面要随所订线缆的种类不同而不同,说明了界面的输入输出方式是多样的,这是表示的多样性,对应于表示层。 能否开放该新订单取决于该订单的总金额和该订单的销售员的金额授权以及库存情况,这是商业规则,对应于商务层。录入订单,并保存订单,以及如果销售员金额权限不够,要提示请销售经理进行授权审批,是要实现的功能,这种功能是由客户端组织的,在表示层实现。订单,销售员权限,这是数据,对应于数据层。
但层的软件实现基础是什么呢?换句话说,层是如何实现的呢?
层是通过多组软件模块之间的经过规划的调用来实现的。软件模块可以是源程序代码级别上的子程序,函数过程,对象或二进制代码级别上的组件。如果软件模块是源代码级别上的,那么层就是依赖于源代码的,其发挥作用的范围也就只限于相应的编译后的应用程序。如果软件模块是二进制代码级别上的组件,如COM/DCOM对象或CORBAR对象,层就不依赖于源代码而可以独立地为调用者提供服务。而且可以为多个调用者提供服务,不管这些调用者是不是同一个应用。
层次结构是一种设计思想,适用于单独的本机应用程序设计,更适用于复杂的软件系统。
由于二进制代码级别上的组件在开发,维护,重用方面相对于基于源代码的软件模块的优势,层更多地由二进制代码级别上的组件来组成。例如Windows和Office的层次结构。事实上,只有基于二进制组件的层次结构(各层可以独立存在)才能真正发挥多层结构的威力。
在实际的软件系统中,每一层还可能由多个实现特定目标的子层构成。在设计时,软件模块是基于源代码级别的对象、函数过程还是基于二进制代码级别上的组件取决于系统的复杂度和系统约束。
层就是一群负有特定使命,提供特定服务的软件模块。 例如,先前说提到的订单处理系统中与订单相关的处理可以在三层结构中作如下分布:
注:订单商务对象和数据对象接口中的参数均已省略;接口并不完备,仅作示例用;各层上还有其他相关对象没有列出)请仔细体会不同层次的对象在协同完成同一任务时的角色和思维的层次。
另外一个多层结构的一个典型例子是银行的软件系统。在银行的软件系统中,数据存放在大型机如AS/400上,后台业务交易处理可能在AS/400上也可能在微机上处理(最后提交到AS/400),前端面对用户的形式却是多种多样的:柜台,ATM,Web,电话,手机。不同的前端都是使用同样的后台处理服务。(设想一下,如果不是这样呢?)
综合以上的论述,我们可以画出多层结构系统在逻辑上和布局上的典型视图如下:
多层结构中各类对象的含义与任务是什么呢?:
数据存取对象 : 提供记录的增删改查方法,语义环境是在数据操作层次上
商务实体对象:在一个或多个数据对象之上绑定商务实体的校验规则,提供商务实体对外所应展示的的方法,语义环境是在商务实体的相关操作层次上。例如:一个订单是个商务实体,由订单概要和所订商品两个数据对象组成,对一张订单整体实施校验规则,提供订单的相关商务操作方法,如新增,修改,删除,查询。
商务功能对象:通过一个或多个商务实体对象的协同工作,实现相关的某组功能。语义环境是在商务活动层次上。例如转账,可视为一个商务功能对象,通过按照一定顺序和约定调用转账所涉及的各个商务实体对象提供的接口功能,在一个事务中来完成。
表示层中,同一数据,可能在同一个客户端运行程序内部就有不同的表现形式。也可能由不同的客户端应用程序使用同一商务层的功能。表示媒体也可能多种多样。例如:WebServer就是一种提供将数据转换为便于浏览器浏览的数据格式的表示服务程序。
根据OMG 96年的定义,商务对象有如下定义:“商务对象代表在特定商务领域中活动的事物,商务对象至少包括它代表事物的商务名称和商务定义,属性,行为,关系,法则,政策和限制。例如商务对象可能代表一个人,地方,事件,商务流程或是观念。实际的商务对象范例有:员工,产品,订单,发票和付款等。”
显然,商务对象在多层结构设计中处于核心地位,因此,在多层结构系统中,最关键的就是设计好商务层,具体来说就是设计好商务层中需要存在哪些商务对象,各商务对象任务的分配和其接口的安排。
商务层中的一个设计原则就是:分离商务对象,封装商务处理与商务规则。
总结:
软件多层结构是一种基于组件和基于服务的,将系统不同层次的功能对应分散在不同软件层次上的软件系统结构设计观念。
与社会化大分工为人类社会带来极大好处相似,多层结构设计也为软件开发带来极大好处:
可重用性:由于商务层的独立存在,那么商务层中的各种服务可以被不同的应用程序使用。将组件的重用范围从以前的的单个项目扩展到企业范围内的多个项目。
配置的灵活性:由于软件系统被分成了独立的三层或多层,可以按照企业商务的功能需求和性能需求灵活配置各层次的物理位置,功能划分,计算机数量等,为需求迅速增长的分布式应用提供了实现基础。例如不同的部门的不同应用可以连接到不同的应用服务器上。各个层次还可单独选择最恰当的开发工具。
开发并行性:由于层与层之间是采用基于服务的存取(接口调用),并且是独立存在的,所以各层可以在约定好的接口下并行开发。
系统进化的容易度:当软件需求变更时或技术进步时,只需要更改相应层中的组件,在保证接口不变的情况下,不会影响系统的其他部分,也不需重新测试系统的其他部分。而且层与层之间采用基于服务的调用方式,所以,当商务规则变化时,只要更新单一的商务层,运行表示层的各个客户端便自动地获得按照新的商务规则处理的能力。在基于商务层服务的基础上,可以采用渐增的方式增加客户端应用种类和接入媒体,因而系统可扩展性很好。
|