Net应用软体设计

发布时间: 2007-05-21 09:44    作者: 未知    来源: 未知    浏览:    评论

Net应用软体设计
---- 使用UML
                               周 瑞 & 伟 峰
  
    iO联网组织是一种极柔软的组织形式,层级组织则是一种硬式的组织形式。软体的本质就必须相当“柔软”,与硬体的“刚硬”,构成刚柔并济的最佳拍档。在Internet的基层有TCPIP、HTTP等协定,.Net则提供较高层的软体协定(Protocol)及服务,让软体元件能在Internet上顺利分工整合,支持灵活的跨企业eProcess。
    本文举例说明,如何透过OOAD及UML分析出企业元件(Business Object),安排这些元件的分工,并整合出企业流程物件(Business Process Object),也就是use case object (简称uco);然后再由uco整合出wco (Web Control Object)。而.Net让wco能在Internet上,互相沟通、分工与合作,支持多元多变的eProcess。
  
  

.Net的角色
---- iO软体协定与服务
  
    大家都能感觉东西的「软」与「硬」,例如一条缝衣服的线,你移动线的一头端,不见得会带动线的尾端,所以我们感觉线是软的。而像钢线就感觉硬得多了。日常生活中,还有像泥鳅、龙等都是软的。移动位置是一种「改变」(Change),龙首改变不会立即强力控制(Control)或影响龙身的改变,对龙尾的立即影响更小。意味着,龙首、龙身、龙尾3个「部份」(Part)之间的相依性(Dependency)蛮小的,构成一个柔软的「整体」(Whole)。

相反地,一条船(如端午节的龙舟)的船头、船身、船尾3部份之间的相依性非常大,构成一个钢硬的「整体」(Whole)。
   钢硬的东西(或系统)各部份直接相依,我们一般会觉得比较容易控制,例如移动船尾就会立即直接影响到船头,改变了方向。
    但是「船舵」就比较特殊了,它跟船尾的相依性不高,移动或转动时并不立即直接影响船尾,却能大幅度间接移动船尾,改变整艘船的方向。

    掌舵者就像抓住龙尾巴,感觉软软的,不太容易控制整条龙。勤加练习、领悟、加上一点艺术美感,才能成为好的掌舵者。
    如果一个系统组织的各部份都类似「舵」这样的独立不太相依的话,整个系统的柔软度就提高了,这样的组织形式就是iO联网组织。反之,如果一个系统组织的各部份都类似「船头」、「船尾」这样的高度相依的话,整个系统的很刚硬,这样的组织形式就不是iO联网组织,而是硬式组织,例如封建官僚的层级组织。
    无论是产业iO、企业iO或软体iO组织,在建构上需要较精致的设计;在管理上也需要较多的艺术美感。虽然需要付出较大成本,但常常可获得巨大的效果。例如轻松转动船舵,就能大幅度改变船的方向。
    从上述的比喻,相信您能体会出软体必须元件化(即iO化)的原因,像船舵就是一艘船里必备的元件。
     再看看,铅笔的例子,古典铅笔是硬式组织,而自动铅笔是软式的iO组织 ---- 笔心、笔身与笔擦,皆是透过介面(Interface)联结,不太相依,能分离换新。
    一般而言,产业愈进步,会设计出愈多的软式产品,也就是元件化产品或系统。例如社会组织由专制独裁到自由法治,电脑硬体由Mainframe到开放式PC组件架构,企业组织由层级组织到无中心组织或iO联网组织。软体产业也是如此,从过去模组式的层级组织到分散式元件软体(Component-based Software)。
    但是软体方面比较特殊的是:应用软体元件含有企业的领域知识(Domain Knowledge),使得软体元件之结构必须与企业知识结构一致,而且元件内部细节也必须保持高度弹性,随企业规则(Business Rule)而迅速调整,才能随时支持瞬息万变的e企业流程(eProcess)。所以软体iO组织的设计比PC硬体的iO组织,需要更高的分析与设计技巧(如OOAD技术),关于这一点,在本期杂志「台湾软体业的微笑」一文,有详细的叙述,请您阅读之。
    为了支持产业及企业iO化,跨企业的软体系统整合是必要的。传统上,软体系统的整合方式并没有一致的途径,有的透过资料库软体将后端的资料库整合起来,例如资料的复制(Data Replication)软体等。
    也有的依赖中间软体(Middleware)衔接数个不同的App. Server,由各App. Server上软体元件或应用程式互相沟通合作,提供企业整体服务。这种中间软体包括EJB、MTS、MSMQ、MQSeries、Tuxedo、CICS等,如下图1所示。

  

      图1、整合方式:走旧后门
  

    在Internet环境里,家家都有个新门面 ---- Web Server,是标准而开放的大门,具有一致性。今天, .Net提供软体系统的协定及服务,让App Server也能经由别人的新大门,登堂入室,与对方的App Server沟通,如下图2所示。

  

      图2、整合方式:走新前门
  

    上图1的传统整合方式里,后端App Server上的软体系统,常各有专属的介面及资料格式,缺乏一致性,整合工作复杂,执行效率常会降低。例如,一般ERP系统都很难以跟别系统衔接。
    而上图2的Web Server,则具有高度一致性、开放性、标准性,整合工作单纯且高效率。以前,这新大门只供人们透过Browser来查查网页。现在,Internet成为软式组织的连结网主干,而.Net则加强Internet上的协定和服务,让软体元件能分散到各个企业,提供及时完整的资讯到世界各地,成为企业iO组织的稳固基础,也强化跨国界的产业iO组织。其实,这是的EC架构的自然趋势,例如在上一期物件导向杂志(No.13)里,就说明过第三代EC的结构如下图3所示。

  

     图3、第三代EC的基础软体架构(请参阅物件导向杂志No.13)
  

   乍看之下,好象蛮复杂的,其实不然。其基本的组成元素,蛮简单的,只有如下图4所示的几种基本元素而已。wco代表大流程,uco代表小流程,Object或Bean代表企业规则。wco能与其它企业的wco整合出跨企业的流程,提供联合e化服务。当这种整合e化服务愈发达,企业的分工就愈细,也愈专精,也更促进产业的分工整合。


       图4、 .Net应用软体架构的基本元素
  

   在.Net平台上,wco之间可互相沟通,wco与uco之间也能顺畅沟通,如下图5就显示出各种可能的沟通方式。

  

      图5、 .Net应用软体元件的沟通

wco元件之间,wco与uco元件之间,其透过介面衔接,相依性蛮低,所以能极灵活地整合出极柔软的软体,随时支援各式各样的企业流程。
    兹拿MM连锁商店公司为例,MM公司有一个总部(HQ),上千个分店(POS端)。当您上网向MM公司刷信用卡购物时,MM公司Web Server里的wco元件会请求信用卡银行的wco元件检查顾客资料、信用额度等等。此应用软体的架构如下图6所示:

  

  图6、连锁商店的.Net应用软体元件沟通

从企业内的流程来看,B.O.(Business Object)是分工的工作者,uco则是整合者;从跨企业的e化流程来看,uco是分工的工作者,wco则是整合者。以iO联网组织图来表达上述的分工整合关系,就如下图7所述了。
  

  

   图7、连锁商店的软体iO组织图
  

POS端的元件之间如何沟通,由POS的应用程式协定来决定的。总部的元件之间如何沟通,由总部的应用程式协定来决定的。至于POS端元件与总部元件之沟通则视MM公司的应用软体协定而决定了。例如上图6里的虚线箭头通常是禁止的,以便降低POS端元件设计与总部端元件设计的相依性,可减低软体的开发、管理与维护的成本。但是在某些情况下,则是允许的,这必须在MM公司的应用软体协定中表明清楚。
如果MM公司应用软体协定规则是:只允许POS端的uco元件跟总部的uco元件沟通,而不允许两端的B.O.之间互相沟通。则上图7的iO组织图就相当于下图8了。同时也规定MM公司的uco不能直接与别公司的uco沟通。

  

     图8、连锁商店的另一种软体iO组织图
  

这样的协定,其优点是:子系统之间(例如POS端与总部)的介面简单明确,大大减简化了软体系统的『整体』复杂性。但缺点是:POS端B.O.需要与总部的B.O.沟通时(例如欲更改总部的交易档案资料),须委托uco来转达,徒增了元件内部逻辑的复杂度。如何在这鱼与熊掌的两难之间获取和谐之美,就取决于协定设计者的创意美感了。
   过去的软体开发者,大多基于简单的假设:各个程式的复杂度的总合就是整体系统的复杂度。所以一味追求各个程式的简单化,而忽略掉程式之间介面才是影响整体复杂度的主因。这样子带来的是系统的管理、维护等费用急速上升,像Mainframe上的传统COBOL程式就是个例子。随着现在企业经营环境变动加速,上述软体的管理维护成本更是一路飙涨。
由于元件式软体重视介面的设计,能有下解决这个问题,它才成为当今的主流软体技术。而设计介面(例如子系统介面、元件介面等等),也就成为软体协定设计者的主要工作了,像.Net的主要贡献就是提供一致的元件介面,让软体元件能在网路上顺畅沟通。
为了更清楚说明上述的理念,接下来就拿EC的ShoppingCart为例,从设计.Net应用软体过程中,细嗅它的无限美感。
  
  
  
  
设计 .Net应用软体
---- 以ShoppingCart应用为例
  
兹以EC的ShoppingCart为例说明.Net应用软体设计。依据前面的「软体iO联网组织」文章里所介绍的iO化(即元件化)程序,能从领域知识可找到4个基本概念(Concept):ShoppingCart、OrderLineItem、Customer及Product。这些概念就对应到软体的元件,以UML的类别(Class)表达元件的定义及元件之间的关系,如下图9:
  
  
  
  图9、以UML类别图表达元件
  
    使用UML的use case图表示系统的功能及动态行为;例如,从ShoppingCart应用系统的user需求来看,此系统应具有如下图10所示的功能或流程:
  
图10、以UML的use case图表达流程
  
在以.Net平台上,上图10的各个use case皆可对应到一个uco元件,uco负责带领ShappingCart等企业物件,以完成该use case的任务。 这些较小use case能组合(或称整合)成为较大use case,例如Web Order wco等,如下图11所示。

  

    图11、ShoppingCart系统的iO联网组织图
  

此MM企业的WebOrder wco元件会委托银行的CreditCard Payment wco元件核验信用卡资料,构成顺畅的跨企业电子流程(eProcess),强力支持企业的超分工整合。这就是软体iO组织支持企业iO组织的情形。
现在已经了解上图11的各元件之意义了,接下来就看看如何设计MM’s应用软体协定。协定能以中文或英文叙述之,也能以UML语言来表达之。前者比较人性有深刻涵义,后者严谨明确不易混淆。例如可写到:
  
『uco可以呼叫别的uco或B.O. 』
『wco可以呼叫自己公司其他wco
或uco,也可呼叫别公司的wco 』
   ………
  
如果需要更严谨而明确的叙述时,UML就是理想的语言。例如UML的sequence图能细腻地叙述uco与各B.O. 的合作关系。像下图12的UML图就表示Customer与ShoppngCart的分工,由CreateOrder元件将之整合,而达成CreateOrder流程与服务。

  

      图12、 UML表达CreateOrder uco的沟通情形
  

uco元件首先从Customer元件取得顾客资料,例如顾客的交易历史记录、顾客密码等等。此时Customer元件自己会从DB读取顾客资料,然后回传给uco元件。uco核验顾客资料之后,就诞生一个ShoppingCart物件,于是完成了CreateOrder流程的任务了。
同样地,下述的图13以UML语言表示出AddProduct流程里的uco元件与相关B.O.的分工整合情形。首先核验欲购产品的资料,例如库存量等。此时Product元件自己会从DB读取产品资料,回传给ShoppingCart元件。然后ShoppingCart诞生一个OrderLineItem物件,并设定其初期值。
  

  

   13、AddProduct流程里的分工整合情形
  

   这些UML图不仅规范了uco与B.O.的沟通途径,同时也叙述了B.O. 之间的互相沟通合作。这图并不凸显各元件的程式细节,而是凸显各元件「该有」的服务,以及元件合作关系。

  

图14、RemoveProduct流程里的分工整合情形
  

这些UML图着重元件的沟通介面(Interface),这就是软体协定的主要内容了。从图14可知ShoppingCart元件的介面里应该包含有RemoveProduct功能。从下图15可知ShoppingCart元件的介面里还应该包含有CalTotal、CalTax、CalSpFee等功能。

  

   图15、CheckOut流程里的分工整合情形


    依序针对每一个uco,皆以UML图叙述该use case的流程,无论流程多么地复杂,UML图皆能表达得很精确。例如下图16就是比较复杂一点的use case。

  

图16、QueryOrder流程里的分工整合情形
  

接着设计wco元件,这wco元件的任务是安排各uco元件的分工合作,能以UML图表示这些uco元件的分工整合情形,如下图17所示。

  

  图17、WebOrder wco代表大流程,由各uco组合而成

这图17说明了wco元件如何与uco沟通,同时也跟银行的CreditCard Payment wco元件沟通合作。
也请留意,上述图12 ~ 16的UML图是应该由App Server的人员负责设计的,这些人员对Web Server技术并不需要深厚的基础。而图17的UML则是由Web Server的人员设计的,这些人员对App Server及DB技术并不需要深厚的基础。这样对开发人员的分工与整合极有帮助。
就App server 元件开发者的观点来看,wco代表Web server,可先开发App server 元件,然后由Web server 的page设计者将wco衔接起来。因之,两者可并行、同步开发,容易衔接整合,且各自弹性成长。
同样地,以UML图表示另一个wco的任务,如下图18所示:
  
图18、WebQuery元件之规画
  
至于Web Page的任务就是安排各wco元件的分工合作,如下图19所示。

  

   图19、Pages安排wco元件的分工整合
  

所以,图12~16是由App Server元件开发者所设计;图17~18是由Web Server元件设计者所绘;图19则由网页规划者所绘制。
各个开发者皆会专精一项,品质提高,学习单纯又快速,当然维护费用也大幅降低。这就是为什么.Net环境的软体生产力将会大幅降低。
  
  
结语
.Net是软体协定,它规范Internet上的软体元件的分工与整合。.Net应用软体架构本质上就是的iO联网组织,是个极柔软的组织。唯有高度柔软弹性的软体才能充分配合Internet天生的柔软和灵活性。
.Net是一般的软体协定,并未规范特定应用领域的软体元件之沟通。所以软体人员除了设计出很棒的软体元件之外,还必须从应用领域里分析与设计出理想的「应用软体协定」,让软体元件能依据特定企业或应用领域的需要而进行美好的分工。而OOAD与UML是协助人们分析元件(角色)、设计协定(剧本)的绝佳利器n 

TAG

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多