《系统架构业务架构软件架构》由会员分享,可在线阅读,更多相关《系统架构业务架构软件架构(94页珍藏版)》请在金锄头文库上搜索。
1、系统架构=业务架构+软件架构20 九月 2024第2页第8章 系统架构设计v8.1 业务架构v8.2 业务架构分析v8.3 软件架构v8.4 软件架构设计v8.5 软件架构与框架v8.6 软件架构的“41”视图模型v8.7 组件图v8.8 部署图20 九月 2024第3页8.1 业务架构 v1. 问题引入引入系统架构一般涉及到两个方面的内容,其一是业务架构,其二是软件架构。人们常常会听到软件架构这个词,对软件架构的概念也有一些了解,但是,也许还有人对业务架构这个词比较陌生,那么,究竟什么是业务架构呢? 20 九月 2024第4页8.1 业务架构v2. 解答解答问题业务架构描述了业务领域主要的业
2、务模块及其组织结构。业务架构在先启阶段建立,在精化阶段得以改进(关于先启阶段、精化阶段等内容请读者参见第3章的RUP统一过程的相关内容)。业务架构的目的是为业务领域建立一个维护和扩展的结构,描述业务的构成。业务架构对我们理解客户业务,尤其是对软件开发行业确定解决方案起着非常重要的作用。 20 九月 2024第5页8.1 业务架构v3. 分析分析问题 软件开发一直在追求构件化,就像建房子一样来构建系统,用一块一块砌成不同形状的砖头来搭建自己想要的房子。在很多人看来,构件化开发是技术问题。即随着技术的发展,各种先进的架构和技术框架能够越来越多地解决复杂的现实问题,总有一天,我们能够利用一个极其灵活
3、和强大的技术架构,将现实中的业务像搭房子一样构建出整个系统。但是,技术架构仅仅提供了您搭建房子的手段和方法,从可行性上给予您支持,您是否想过您砌成大大小小不同形状的砖头是什么呢?它们从何而来呢? 8.1 业务架构可见,喜欢和迷信技术的我们又忘了一个基本原则:技术服务于业务。尽管我们知道怎么样搭建房子,而手中却没有可用的砖头,怎么能建好房子呢?正所谓巧妇难为无米之炊啊。软件、技术通通是服务于业务的,技术只是保证做好系统的手段,一个好的软件其根本还在于业务的理解上。 8.1 业务架构SAP是业界著名的ERP软件产品,它之所以能够做到通用,即使在不同行业间实施也只需很小的开发工作量,绝大部分需求都是
4、通过配置来完成的。不是因为SAP采用了多么先进的技术架构,而是因为SAP把业务做到了极致,它已经砌好了那些可以搭建不同业务平台的各式各样的砖块。再复杂和迥异的需求,都可以用这些砖块搭建出来。这些砖块,就是业务架构。 8.1 业务架构在项目开发过程中,当我们获得了一份需求时,如果不建立业务架构,那么这份需求对我们来说就是一盘沙子,每次我们都要从头把沙子做成砖块,一点点辛苦地开发程序。而建立业务架构的工作,就是要把沙子变成各式各样的砖块、部件,从部件做起而不是从沙子做起,像拼图一样,拼出我们的世界来。 8.1 业务架构但这项工作是非常困难的,需要非常精深的行业知识。并且不是一朝一夕就可行的,必须通
5、过几个甚至几十个项目的累积,才有可能总结出可用的拼图。在开发项目时,仅将业务架构作为项目中的一项工作,它可能不会对你当前的项目带来什么好处,但是随着每一个项目的积累,不断地修正和丰富业务架构,手中可用的砖块就会越来越多,越来越丰富。总有一天,你可以用拼图来完成项目中大部分的业务需求,也就是行业解决方案的形成。 8.2 业务架构分析v分析工作往往被模糊化,经常的情况是需求弄清楚以后直接进入设计阶段,例如详细的表结构、类方法、属性、页面原型等,然后就进入编码阶段了。那么分析与设计之间究竟存在什么样的差别呢?从工作任务上来说,分析做的是需求的计算机概念化;设计做的是计算机概念实例化。从抽象层次上来说
6、,分析高于实现语言、实现方式;而设计则基于特定的语言和实现方式。因此分析的抽象层次高于设计的抽象层次。从角色上来说,分析由系统分析师承担的,而设计则由设计师来承担。从产出物上来说,分析的典型成果是分析模型和组件模型,设计的成果是设计类、程序包等。 8.2 业务架构分析v系统分析是在不考虑具体实现语言和实现方式的情况下,将需求在软件架构和框架下进行的计算机模拟。系统分析的目的是确定系统应当做成什么样的设想,而系统设计的目的是将这些设想转化为可实施的步骤。如果类比于房屋装修,分析相当于绘制设计图,而设计则相当于绘制施工图。分析决定哪个地方用哪个物品来装饰,设计决定如何装饰,用什么工具来装饰。 8.
7、2 业务架构分析v事实上,经过分析之后,已经决定了系统要做成什么样子,已经完成了从需求到系统的转换过程。至于接下来是用JAVA还是C#,是用J2EE还是.NET,是用两层结构还是用三层结构,是用工厂模式还是用适配器模式就已经不是问题的重点了。不论采取什么样的实现方式,得到的结果无非是程序运行效率的高低、扩展性、可维护性的差别,无论如何都不会影响系统实现需求这一最基本的要求。 8.2 业务架构分析v8.2.1 客户服务系统业务架构分析v8.2.2 客户服务系统子模块划分20 九月 2024第14页8.2.1 客户服务系统业务架构分析 v1. 问题引入引入上面我们已经了解了分析与设计的区别,接下来
8、将讨论客户服务系统的业务架构分析与实现。 20 九月 2024第15页8.2.1 客户服务系统业务架构分析v2. 解答解答问题客户服务系统的业务架构如图8-1所示。8.2.1 客户服务系统业务架构分析图8-1 客户服务系统业务架构 20 九月 2024第17页8.2.1 客户服务系统业务架构分析v3. 分析分析问题对客户服务系统业务架构的分析立足于对需求足够理解的基础之上,我们知道软件开发中最重要的就是抽象,也就是采用OO(面向对象)的思想,这个思想应贯穿于软件开发过程的始终。需求作为分析过程的输入,需求分析后,产生用例模型和领域模型。用例模型和领域模型是业务架构的基础。如果只有用例模型和领域
9、模型而没有业务架构,我们将“只见树木不见森林”。因为不论是用例模型还是领域模型,它们都只是业务领域的一部分。如果说用例模型代表了一个软件项目对需求的定义和理解,那么架构就代表了一个软件项目对系统的定义和理解。架构将系统规划为一些独立的逻辑组件,各负其责,这些组件通过标准的通信接口传递信息。一个架构就是一个系统的骨架。 8.2.1 客户服务系统业务架构分析v通过整理客户服务系统的需求,我们摘录出系统的核心业务如下:v(1) 公司客户通过 完成对软件产品或项目提出使用中的BUG或疑难问题以及投诉建议等内容。v(2) 客户服务人员代理公司客户将咨询内容录入到客户服务系统中,以供备案查询。v(3) 部
10、门领导负责处理相关客户的投诉建议及故障申报,并视具体情况安排维护人员上门维护及安排客户服务人员进行回访。v(4) 维护人员通过查询任务安排,接受相关派工任务,并填写维护报告。v(5) 客户服务人员通过查询任务安排,接受相关回访任务,并填写相关回访报告。v(6) 系统管理员对系统基础资料进行维护管理。v(7) 部门领导可以查询客户服务人员及维护人员的工作完成情况。v由此分析出客户服务系统的核心业务架构,用业务活动图表示如图8-2所示。 8.2.1 客户服务系统业务架构分析图8-2 客户服务核心业务活动图 8.2.1 客户服务系统业务架构分析v业务架构与核心模型的关系可用图8-3来表示。用例模型、
11、领域模型所描述的业务过程,通过抽象可得到业务架构。反过来,业务架构对用例模型和领域模型则有着重要的指导作用。尤其在业务架构改进的时候,某些用例可能需要重组,领域模型也可能重构。 8.2.1 客户服务系统业务架构分析图8-3 业务架构与核心模型的关系 8.2.1 客户服务系统业务架构分析v从图8-3可以看出,实际上建立业务架构的活动是一个反复迭代的过程,且非常类似于面向过程的结构化设计,不同的是,在结构化设计方法中,得到的结果是子系统、模块;而在面向对象的设计方法中,得到的结果则是业务组件。 20 九月 2024第23页8.2.2 客客户服服务系系统子模子模块划分划分v1. 问题引入引入了解客户
12、服务系统的业务架构图之后,接下来我们应该做的就是对客户服务系统划分模块。 20 九月 2024第24页8.2.2 客客户服服务系系统子模子模块划分划分v2. 解答解答问题客户服务系统的子模块如图8-4所示。8.2.2 客客户服服务系系统子模子模块划分划分图8-4 客户服务系统子模块 8.2.2 客客户服服务系系统子模子模块划分划分v进一步划分模块,系统管理模块、客户服务业务处理模块、信息查询统计模块分别划分为如图8-5、图8-6、图8-7所示的子模块。 8.2.2 客客户服服务系系统子模子模块划分划分图8-5 系统管理模块 8.2.2 客客户服服务系系统子模子模块划分划分图8-6 客户服务业务
13、处理模块 8.2.2 客客户服服务系系统子模子模块划分划分图8-7 信息查询统计模块 20 九月 2024第30页8.2.2 客客户服服务系系统子模子模块划分划分v3. 分析分析问题(1) 客户服务系统子模块在得到业务架构的基础上,我们对客户服务系统的业务进行细分为以下三个子模块:v 系统管理模块。包括客户基础资料录入修改,客户服务系统用户信息的添加、删除和修改,软件产品的基础资料维护,已上线项目的基础资料维护,FAQ经验库的数据维护以及客户服务系统本身的维护管理等。v 客户服务业务处理模块。包括客户咨询服务处理、故障申报处理、投诉处理,部门领导派工处理,客户服务人员回访处理,维护人员上门处理
14、等。v 信息查询统计模块。包括基础资料查询统计,客户咨询的查询与统计,派工单完成情况,回访报告,维护报告查询统计以及相关报表的查询等。 20 九月 2024第31页8.2.2 客客户服服务系系统子模子模块划分划分v(2) 各子模块的功能 系统管理模块v客户资料管理客户资料是客户服务系统的根源,只有健全的客户资料体系才能够保证客户服务有序地开展。主要包括录入客户资料、修改客户资料、删除客户资料和查询客户资料等功能。v系统用户管理包括本系统的所有使用者的信息资料管理及查询。v产品管理包括公司所有发布的软件产品信息的管理及查询。v项目管理包括公司所承担的各种软件研发项目信息的管理及查询。v经验库管理
15、包括经验信息的管理及查询。 8.2.2 客客户服服务系系统子模子模块划分划分 客户服务业务处理模块。v客户咨询管理包括客户咨询信息的管理及查询。客户咨询服务活动如图8-8所示。 图8-8 客户咨询服务活动图 8.2.2 客客户服服务系系统子模子模块划分划分v派工管理当有客户投诉及报障时,部门领导会立即对投诉及报障的客户作出快速反应,及时安排派工任务。对投诉的客户安排客户服务人员及时回访处理;对报障的客户安排维护人员进行上门维护处理。派工活动图如图8-9所示。 图8-9 部门领导派工活动图 8.2.2 客客户服服务系系统子模子模块划分划分 信息查询统计模块v包括查询统计基础资料、客户咨询信息、派
16、工单完成情况等信息,并可打印报表。 20 九月 2024第37页8.3 软件架构v1. 问题引入引入经过业务架构的分析与建模,我们得到了许多业务构件,要将这些业务构件搭建起来需要了解软件架构的知识。那么什么是软件架构呢? 20 九月 2024第38页8.3 软件架构v2. 解答解答问题软件架构是一种思想,一个系统蓝图,是对软件结构组成的规划和职责设定。一个软件里有处理数据存储的、处理业务逻辑的、处理页面交互的、处理安全的等许多可逻辑划分出来的部分。传统的软件并不区分这些,将它们全部混合在一段程序里。软件架构的意义就是要将这些可逻辑划分的部分独立出来,用约定的接口和协议将它们有机地结合在一起,形
17、成职责清晰、结构明朗的软件结构。 20 九月 2024第39页8.3 软件架构v3. 分析分析问题一个典型的软件架构包括两个视角:广度视角和深度视角。这两个视角构成对软件架构的“立体”描述。广度视角即是我们常说的软件层次结构,它关注软件的分层,规定每一层的职责以及层与层之间的通讯标准。一般使用包元素来描述。图8-10展示了一个典型的多层架构的层次模型。8.3 软件架构图8-10 软件层次的广度视角架构图 8.3 软件架构另一方面,软件架构还需要描述深度视角。所谓深度视角,是指广度视角中每一层的详细说明,它关注每一层以及每个部分的具体实现架构。例如可以针对业务实体层进行架构描述,也可以针对XML
18、Bean进行架构描述。图8-11展示了业务实体层的深度视角视图。 8.3 软件架构图8-11 软件层次深度视角架构图 8.3 软件架构广度视角和深度视角将软件架构立体化了。层次构成了广度视角维度,而每一个层次的包、类的结构构成了深度视角维度。20 九月 2024第44页8.4 软件架构设计v1. 问题引入引入软件架构设计就是要将我们在业务架构中设计出来的业务构件有机地结合在一起协调工作。那么客户服务系统的软件架构是怎样的呢? 20 九月 2024第45页8.4 软件架构设计v2. 解答解答问题客户服务系统软件架构图如图8-12所示。20 九月 2024第46页图8-12 客户服务系统软件架构图
19、 20 九月 2024第47页8.4 软件架构设计v3. 分析分析问题根据需求,客户服务系统要求是B/S架构的,即浏览器/服务器架构。该架构有许多优点:客户端无需安装任何软件,只要有浏览器就可以使用系统,方便客户服务人员能即时处理客户问题。当业务架构确定后,至于是选用.NET来实现还是选用J2EE来实现并不重要,主要依据开发团队的技术素质而定,以期达到最小项目风险和减少开发成本的目的。本节选用J2EE来描述客户服务系统的软件架构分层模型,采用了MVC架构体系,结合当前使用最成熟的Struts + Spring + Hibernate框架,如图8-13所示。8.4 软件架构设计图8-13 Str
20、uts+Spring+Hibernate框架图 8.4 软件架构设计Struts + Spring + Hiberante框架的WEB应用常常被扩展成4个各负其责的层次:表示层(Presentation)、业务层(Business)、持久层(Persistence)、领域模型层(Domain Model)。前三层分别对应于Struts、Spring、Hibernate,而领域模型层则是由那些现实世界中的业务对象组成,如客户、咨询、回访、投诉等等,它们是在上面三个层之间传递的对象。每层职责明确,彼此独立,通过专门编写的接口传递消息。 8.4 软件架构设计客户服务系统分为四个层次,其中WEB层采用
21、Struts框架,Service和Dao采用Spring框架封装客户服务业务逻辑处理,DB Control层采用Hibernate框架。VO(Value Object,值对象)和PO(Persistant Object,持久对象)之间的关系及传递如图8-14所示。 8.4 软件架构设计图8-14 PO与VO之间实现关系 8.4 软件架构设计PO可以看成是与数据库中的表相映射的Java对象。一张数据库表对应一个Java对象。由Hibernate自动反转生成,简化Java与数据库之间的操作。VO是由Hibernate PO复合而成的一个业务对象,用于业务层之间的数据传递。RelationShip维
22、护组成VO与多个PO之间的对应关系。Hibernate可维护PO之间的一对多,一对一,多对多等关系,但这些关系是指数据库之间的关系。Relationship管理的是非数据库的、业务逻辑要求的关系。ServiceControl是Service层访问Dao层的接口。负责将PO组合成VO或将VO分解成PO。Service层通过ServiceControl来存取VO,同时将分解出的PO传递给DBControl。 8.4 软件架构设计图8-15以客户服务系统查询客户来电咨询记录,同时显示客户资料信息为例,说明客户服务系统架构层次的动态实现。图8-15 客户服务系统查询客户来电咨询的动态实现 8.4 软件
23、架构设计简要说明:客户服务人员首先发出“查询客户咨询记录”命令,系统查找到客户咨询记录相关信息,并返回给ServiceControl,同时根据记录在该表中的客户资料ID的外键信息,到客户资料信息表中查找相关客户资料的详细信息,最后将客户资料信息和客户来电记录信息组合成VO返回到Service层,展示给客户服务人员。 8.4 软件架构设计v下面分别对Struts、Spring和Hibernate作简要介绍。8.4 软件架构设计v(1) StrutsStruts由一组相互协作的类、Servlet以及丰富的标记库(jsp tag lib)和独立于该框架工作的实用程序类(Validator)组成。St
24、ruts有其自己的控制器(Controller),同时整合了其它的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易地与数据访问技术相结合,包括EJB、JDBC和Object Relation Bridge。在视图层,Struts能够与JSP、Velocity Templates和XSL等等这些表示层组件想结合。Struts Framework是MVC 模式的体现,下面我们就分别从模型、视图和控制来看看Struts的体系结构(Architecture)。Struts Framework的体系结构响应客户请求的时候,各个部分的工作原理如图8-16所示。8.4
25、 软件架构设计图8-16 Struts工作原理图 8.4 软件架构设计v(2) SpringSpring 是一个开源框架,是为了解决企业级应用程序开发的复杂性问题而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 Bean 的方式,如图8-17所示。8.4 软件架构设计图8-17 Spring框架分层架构图 8.4 软件架构设计v(3) HibernateHibernate是一个免费的开源J
26、ava包,它使得与关系数据库打交道变得十分轻松,它是一个面向Java环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relational mappin,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。Hibernate不仅管理Java类到数据库表的映射(包括Java数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。 8.4 软件架构设计事实上,在一个基于数据库的Web系统中,建立数据库连接的操作将是系统中代价最大的操作之一。很多时候,可能系统的速度瓶颈就
27、在于此。Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95,对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的。不管怎样,Hibernate一定可以帮助我们消除或者包装那些针对特定厂商的SQL代码,并且帮我们把结果集从表格式的表示形式转换到一系列的对象中去。 20 九月 2024第63页8.5 软件架构与框架v1. 问题引入引入现实中,很多人把架构和框架搞混,有的人认为架构和框架就是同一个东西,那么究竟两者是否相同,如果不同,又有什么区别呢? 20 九月 2024第64页8.5 软件架构与框架v2. 解
28、答解答问题架构的英文原文是Architecture,而框架则是Framework。显然是两个完全不同的词。从技术上讲,IT有一个职业是架构师,代表了软件技术人员最高的职业,却从没有听说过有软件框架师的,所以肯定地说,软件架构和软件框架是两回事。架构是一种思想,一个系统蓝图,是对系统高层次的定义和描述。框架是针对某个问题领域的通用解决方案,它通常集成了最佳实践和可复用的基础结构,对开发工作起到减少工作量、指导和规范作用。20 九月 2024第65页8.5 软件架构与框架v3. 分析分析问题如果用建设一幢大楼来作比喻,架构就是大楼的结构、外观和功能性设计,它需要考虑的问题可以延伸到抗震性能、防火性
29、能、防洪性能等;而框架是建设大楼过程中的一些成熟工艺的应用,例如楼体成型、一次浇灌等。再举一个例子,可以说架构是战略性的,它描述战略目标、指挥系统、信息传递、职责、部署等;框架是战术性的,它描述组织、建设、作战方案、命令下达、战术执行等。我们可以说MVC是一种设计思想,它将应用程序划分为实体、控制和视图三个逻辑部件,因此它是一个软件架构。而Struts,JSF,WEBWork等开源项目则分别以自己的方式实现了这一架构,提供了一个半成品,帮助开发人员迅速地开发一个符合MVC架构的应用程序,因此可以说我们采用了Struts或JSF或WEBWork软件框架,开发出了符合MVC架构的应用程序。 8.6
30、 软件架构的“41”视图模型v1. 问题引入引入 软件架构用来处理软件高层次结构的设计和实施。它不是一维的,而是由多个同时存在的视图构成。它将若干结构元素进行装配,从而满足系统主要功能和性能需求,并满足其它非功能性需求,如可靠性、可伸缩性、可移植性和可用性等。那么,描述软件架构的这个“41”视图究竟有哪些?它们有怎样的交互作用? 8.6 软件架构的“41”视图模型v2. 解答解答问题软件架构“41”视图模型及视图间的交互关系如图8-18所示。4个视图为逻辑视图、进程视图、组件视图和部署视图,而用例视图则为“1”的视图。 8.6 软件架构的“41”视图模型图8-18 软件架构“41”视图模型 8
31、.6 软件架构的“41”视图模型v3. 分析分析问题在RUP中,软件架构的“41”视图模型包括下列五个视图:v(1) 用例视图:包含用例和场景,这些用例和场景含有重要架构行为、类或技术风险。它是用例模型的子集,用于描述用例、参与者和普通设计类的用例图,描述设计对象及其协作的顺序图。v(2) 逻辑视图:包含最重要的设计类、包和子系统中类的组织,以及各层中这些包和子系统的组织。它还包含某些用例实现,它是设计模型的子集。逻辑视图包含类图、状态图和对象图。 8.6 软件架构的“41”视图模型v(3) 组件视图:包含实施模型的概述,以及按模块划分为包和层的模型组织。还描述了从“逻辑视图”将包和类分配到“
32、组件视图”中的包和组件。它是组件模型的子集,包含组件图。v(4) 进程视图:包含所涉及任务(进程和线程)的描述、任务的交互和配置以及从设计对象和类到任务的分配。仅当系统具有相当并行程度时,才需要使用该视图。它是设计模型的子集,包含类图和对象图。 8.6 软件架构的“41”视图模型v(5) 部署视图:包含对最典型平台配置的多个实际节点的描述,以及从“进程视图”将任务分配到实际节点。仅当系统为分发式系统时,才需要使用该视图,它是部署模型的子集,包含部署图。但对于一些简单的系统,您可以省略其中包含的某些视图。例如,如果只有一个处理器,则可以省略部署图;如果只有一个进程或程序,则可以省略进程视图。 8
33、.7 组件图v1. 问题引入引入在软件建模过程中,使用用例图可以推断系统希望的行为;使用类图可以描述系统中的词汇;使用顺序图、组件图、状态图和活动图可以说明这些词汇中的事物如何相互作用以完成某些行为。在完成系统的逻辑设计之后,下一步要定义设计的物理实现,在面向对象系统的物理方面进行建模时要用到两种图:组件图和部署图。其中,使用组件图能够可视化物理组件以及它们之间的关系,并描述其构造细节。那么什么是组件图?客户服务系统的组件图是怎样的? 8.7 组件图v2. 解答解答问题组件图(Component Diagram)描述了软件的各种组件和它们之间的依赖关系。组件图中通常包含3种元素:组件(Comp
34、onent)、接口(Interface)和依赖关系(Dependency)。每个组件实现一些接口,并使用另一些接口。如果组件间的依赖关系与接口有关,那么可以被具有同样接口的其他组件所替代。(1) 客户服务系统中的页面级组件图,如图8-19所示。 图8-19 客户服务系统中的页面级组件图 8.7 组件图(2) 客户服务系统的代码级组件图(部分组件),如图8-20所示。8.7 组件图8.7 组件图图8-20 客户服务系统中的代码级组件图 8.7 组件图v3. 分析分析问题所谓业务架构,实际上就是在对需求细致分析和深刻理解的基础上,抽象出若干相对独立的业务模块,形成自洽的业务组件。这些组件对内可以完
35、成一个或一组特定的业务功能,对外则有着完善的接口,可以与其他组件共同组成更为复杂的业务功能,直至构成整个系统。 8.7 组件图组件(Component)是定义了良好接口的物理实现单元,是系统中可替换的物理部件。一般情况下,组件表示将类、接口等逻辑元素打包而形成的物理模块。它可以是软件代码(源代码、二进制代码或可执行代码)或其等价物(如脚本或命令文件)。在UML中,组件用一个左侧带有两个突出小矩形的矩形框来表示,如图8-20中的标有“Customer”的组件,其中Customer是组件名。组件之间的虚线箭头表示组件间的依赖关系。将组件通过一条实线相连的圆圈被称为接口,如图8-20中的“IBase
36、dao”即为接口。 8.7 组件图建模过程中,我们通过组件这一元素对分析设计过程中的类、接口等进行逻辑分类,一个组件表达软件的一组功能。组件在很多方面与类相同:两者都有名称;都可以实现一组接口;都可以参与依赖关系;都可以被嵌套;都可以有实例;都可以参与交互。但是类和组件之间也存在着差别:类描述了软件设计的逻辑组织和意图,而组件则描述软件设计的物理实现,即每个组件体现了系统设计中特定类的实现。 8.7 组件图组件图的一般建模步骤如下:v(1) 确定组件。首先要分解系统,考虑有关系统的组成管理、软件的重用和物理节点的配置等因素,把关系密切的可执行程序和对象库分别归入组件,找出相应的对象类、接口等模
37、型元素。v(2) 对组件加上必要的构造型。可以使用UML的标准构造型executable、library、table、file、document,或自定义新的构造型,说明组件的性质。v(3) 确定组件之间的关系。最常见的组件之间的关系是接口依赖。一个组件使用某个接口,另一个组件实现该接口。v(4) 必要时把组件组织成包。组件和对象类等模型元素一样可以组织成包,如图8-21所示的客户服务系统组件包。v (5) 绘制组件图。 图8-21 客户服务系统的组件结构 8.8 部署图v1. 问题引入引入上节提到对系统的物理方面进行建模时要用到两种图:组件图和部署图,并且已经对组件图做了介绍,本节将介绍部署
38、图的概念及客户服务系统的部署图。 8.8 部署图v2. 解答解答问题部署图(Deployment Diagram)描述了运行软件的系统中硬件和软件的物理结构,即系统执行处理过程中系统资源的部署情况以及软件到这些资源的映射。部署图中通常包含两种元素:节点(Node)和关联(Association)。客户服务系统的部署图,如图8-22所示。 图8-22 客户服务系统部署图 8.8 部署图v3. 分析分析问题部署图考虑应用程序的物理部署,如网络布局和组件在网络上的位置的问题。部署图包含处理器、设备、进程和处理器与设备之间的连接。这一切都显示在部署图上。每个系统只有一个部署图,因此每个Rose模型也只
39、有一个部署图。 8.8 部署图节点(Node)是在运行时代表计算资源的物理元素。它通常拥有一些内存,并具有处理能力。节点的确定可以通过查看对实现系统有用的硬件资源来完成,这需要从能力(如计算能力,内存大小等)和物理位置(要求在所有需要使用该系统的地理位置都可以访问该系统)两方面来考虑。 在UML中,节点用一个立方体来表示,如图8-22所示。在实际的建模过程中,可以把节点分为两种:处理器(Processor)和设备(Device)。处理器是能够执行软件、具有计算能力的节点,服务器、工作站和其他具有处理能力的机器都是处理器。在UML中,处理器的符号如图8-23所示。而设备是没有计算能力的节点,通常
40、情况下都是其接口为外部提供某种服务,比如哑终端、打印机和扫描仪等都是属于设备。在UML中,设备的符号如图8-24所示。 8.8 部署图图8-23 处理器 图8-24 设备 8.8 部署图部署图中另一元素是关联关系。关联关系(Association)表示各节点之间通信路径。在UML中,部署图中的关联关系的表示方法与类图关系类似,都是一条实线。在连接硬件时通常关心节点之间是如何连接的(如以太网、令牌环、并行、TCP或USB等)。因此关联关系一般不使用名称,而是使用构造型,如、等。图8-25所示显示的是PC机的部署图。该部署图包含了两个处理器和四个设备,处理器包括Server(网络服务器)和PC(主
41、机)。设备包括Mouse(鼠标)、Keyboard(键盘)、Monitor(显示器)和Modem(调制解调器)。其中,Server和Modem之间通过Ethernet(以太网)连接。 8.8 部署图图8-25 关联关系 8.8 部署图v部署图一般用于对系统的实现视图建模,建模的时候要找出系统中的节点以及节点之间的关联关系。一般的建模步骤如下:(1) 确定节点。注意:标示系统中的硬件设备,包括大型主机、服务器、前端机、网络设备、输入/输出设备等。一个处理机是一个节点,它具有处理功能,能够执行一个组件;一个设备也是一个节点,它没有处理功能,但它是系统和现实世界的接口。(2) 对节点加上必要的构造型
42、。可以使用UML的标准构造型或自定义新的构造型,说明节点的性质。8.8 部署图(3) 确定连接关系。这是关键步骤。部署图中的连接关系包括节点与节点之间的连接,节点与组件之间的连接,组件与组件之间的连接,可以使用标准构造型或自定义新的构造型说明联系的性质。把系统的组件如可执行程序,动态连接库等分配到节点上,并确定节点与节点之间,节点与组件之间,组件与组件之间的连接关系,以及它们的性质。(4) 绘制部署图。8.8 部署图v在实际应用中,并不是所有的软件系统都需要绘制部署图。如果要开发的软件系统只需要运行在一台计算机上,且只使用此计算机上已经由操作系统管理的标准设备(如显示器、键盘、鼠标等),那么就没有必要绘制部署图。但是,如果要开发的软件系统需要使用操作系统之外的设备(如打印机、扫描仪、路由器等),或者系统中的设备分布在多个处理器上,这时就必须绘制部署图,以帮助开发人员理解系统中软件和硬件之间的映射关系。20 九月 2024第94页总结v系统架构业务架构软件架构。v业务架构从业务需求的角度描述了系统的物理和逻辑组成,软件架构从技术角度描述了软件的分层和各层之间的接口设计等。v架构是一种思想,一个系统蓝图,是对系统高层次的定义和描述。框架是针对某个问题领域的通用解决方案,通常集成了最佳实践和可复用的基础结构。