http://www.uml.org.cn/zjjs/200906045.asp

在不同的架构设计方法中出现的软件架构视图种类很多,本文介绍最常用的两种架构视图——逻辑架构视图和物理架构视图,并通过具体案例的分析说明如何运用它们进行架构设计。

当观察和描述事物大局的时候,逻辑架构和物理架构是最常用的角度。比如,以我们办公室里的局域网为例:从物理角度看,所有计算机“毫无区别”地连接到路由器上;而从逻辑角度看呢,就发现这些计算机是有区别的——一台计算机充当文件服务器,而其它计算机是可以访问服务器的客户机。如图1所示。

图1  区分物理视角与逻辑视角

同样,在软件架构设计过程中,也可以通过区分软件的逻辑架构和物理架构,分别从不同的角度设计和描述软件架构。

所谓软件架构视图,是指设计和看待整个软件系统的特定视角。每个软件架构视图关注系统架构的不同方面,针对不同的目标和用途。也就是说,架构要涵盖的内容和决策太多了,超过了人脑“一蹴而就”的能力范围,因此采用“分而治之”的办法从不同视角分别设计;同时,也为软件架构的理解、交流和归档提供了方便。

逻辑架构

软件的逻辑架构规定了软件系统由哪些逻辑元素组成、以及这些逻辑元素之间的关系。

软件的逻辑元素一般指某种级别的功能模块,大到我们熟悉的逻辑层(Layer),以及子系统、模块,小到一个个的类。至于具体要分解到何种大小的功能模块才可结束软件架构设计,并不存在一个“一刀切”的标准——只要足够明确简单,能够分头开发就可以了。于是,在实践中我们往往将关键机制相关的架构设计部分明确到类,而一般功能则到模块甚至子系统的接口定义即可。

值得说明的是,功能模块有时容易识别,有时却比较隐含。而比较全面地识别功能块、规划功能块的接口、明确功能块之间的使用关系和使用机制,正是软件逻辑架构设计的核心任务所在。对此,Ivar Jacobson曾有过极为形象的说法,“软件系统的架构涵盖了整个系统,尽管架构的有些部分可能只有‘一寸深’”。

图2展示了一个网络设备管理系统逻辑架构设计的一部分,我们借此来举例说明软件逻辑架构设计的3大核心任务:

识别功能块

规划功能块的接口

明确功能块之间的使用关系和使用机制

软件的逻辑架构是架构设计思维的重要方法。在用例技术已经成为捕获功能需求的事实标准的今天,逻辑架构的设计往往是从用例分析开始的。基于用例的分析方法使逻辑架构的设计变得比较有序——通过对每个关键用例的分析,从逻辑上将用例实现为一组功能块的特定组合,最后综合这些用例分析成果,将一个个独立的协作归纳合并成整个软件系统的逻辑架构。而在用例分析方法产生之前,功能模块的确定多多少少带有些“硬”想出来的味道,特别是并不直接承载业务功能的模块有时比较容易遗漏,直到大规模编程实现阶段才发现。

物理架构

软件的物理架构规定了组成软件系统的物理元素、这些物理元素之间的关系、以及它们部署到硬件上的策略。

物理架构可以反映出软件系统动态运行时的组织情况。此时,上述物理架构定义中所提及的“物理元素”就是进程、线程、以及作为类的运行时实例的对象等,而进程调度、线程同步、进程或线程通信等则进一步反映物理架构的动态行为。

随着分布式系统的流行,“物理层(Tier)”的概念大家早已耳熟能详。物理层和分布有关,通过将一个整体的软件系统划分为不同的物理层,可以把它部署到分布在不同位置的多台计算机上,从而为远程访问和负载均衡等问题提供了手段。当然,物理层是大粒度的物理单元,它最终是由粒度更小的组件、模块、进程等单元组成的。

物理架构的应用很广泛。例如,架构设计中可能需要专门说明数据是如何产生、存储、共享和复制的,这时可以利于物理架构,展示软件系统在运行期间数据是由哪些运行时单元如何产生的,数据又如何被使用、如何被存储,哪些数据需要跨网络复制和共享等方面的设计决策。

由于人们对组成软件系统的“物理元素”存在不同看法(如图3所示),所以在实践中物理架构的用法比较宽泛,不同的人认为的物理架构也可能不尽相同。因此,我们在交流和实践的过程中,应注意区分物理架构所指为何。(也正是因为这个原因,实践中所采用的基于多视图的架构设计方法往往包含更多的视图,从而使每个架构视图的职责更加明确。)

图3    对“物理元素”的不同看法

从逻辑架构和物理架构到设计实现

逻辑架构和物理架构是软件架构设计的重要方面。逻辑架构致力于将软件系统分解成不同的逻辑单元,并规定这些逻辑单元之间的交互接口和交互机制。物理架构则更重视软件系统运行时的动态结构,以及组成软件系统的目标程序如何部署到硬件上。

在后续的详细设计和编程实现中,将贯彻和利用逻辑架构和物理架构设计中制定的架构决策,如图4所示。

  

  图4    逻辑架构和物理架构对后续开发的作用

逻辑架构中关于职责划分的决策,体现为层、子系统、模块等的划分决定,从静态视角为详细设计和编程实现提供切实的指导;有了分解就必然产生协作,逻辑架构还规定了不同逻辑单元之间的交互接口和交互机制,而编程工作必须实现这些接口和机制。 所谓交互机制,是指不同软件单元之间交互的手段。交互机制的例子有:方法调用、基于RMI的远程方法调用、发送消息等。

至于物理架构,它关注的是软件系统在计算机中运行期间的情况。物理架构设计方案中规定了软件系统如何使用进程和线程完成期望的并发处理、进程线程这些主动对象(Active Object)会调用哪些被动对象(Passive Object)参与处理、交互机制(如消息)为何等等问题,从而为详细设计和编程实现提供了工作目标的动态视图。

设备调试系统案例简介

下面通过一个实际案例的分析,来帮助领会逻辑架构和物理架构这两种架构视图对架构设计的指导作用。

该案例是某型号设备调试系统。设备调试员通过使用该系统,可以察看设备状态(设备的状态信息由专用的数据采集器实时采集)、发送调试命令。该系统的用例图如图5所示。


  
图5    设备调试系统的用例图

逻辑架构设计

首先根据功能需求进行初步设计,进行大粒度的职责划分。如图6所示。

 

图6    设备调试系统的逻辑架构

之后,还有很多与逻辑架构设计相关的工作要做。例如,图7所示的CRC卡描述了上面的三层架构每一层的职责与协作者:

应用层负责设备状态的显示,并提供模拟控制台供用户发送调试命令。

应用层使用通讯层和设备控制层进行交互,但应用层不知道通讯的细节。

通讯层负责在RS232协议之上实现一套专用的“应用协议”。

当应用层发送来包含调试指令的协议包,由通讯层负责按RS232协议将之传递给设备控制层。

当设备控制层发送来原始数据,由通讯层将之解释成应用协议包发送给应用层。

设备控制层负责对调试设备的具体控制,以及高频度地从数据采集器读取设备状态数据。

设备控制指令的物理规格被封装在设备控制层内部,读取数采器的具体细节也被封装在设备控制层内部。

图7    用CRC卡描述每层的职责和协作者

物理架构设计

软件最终要驻留、安装或部署到硬件才能运行。软件的物理架构关注“目标程序及其依赖的运行库和系统软件”最终如何安装或部署到物理机器,以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。

多个逻辑层(Layer)可以映射到一个物理层(Tier),这是很多从事分布式开发的读者都了解的。在进行设备调试系统的物理架构设计之时,也体现了这一点。如图8所示,设备调试系统共包含2个物理层:桌面部分和嵌入部分。作为逻辑层的应用层和通讯层最终将成为桌面部分,而设备控制层最终成为嵌入部分。

图8    逻辑层(Layer)到物理层(Tier)的映射

物理层作为组成软件系统的物理单元,最终又要映射到具体的硬件,这也是物理架构设计要考虑的,对于分布式软件系统的设计而言尤其不可或缺。图9展示了这一点。可以看出,设备控制部分驻留在调试机中(调试机是专用单板机),而桌面部分以常见的“Windows可执行程序”的形式运用于PC机之上。

 

图9    设备调试系统架构的物理架构

我们还可能根据具体情况的需要,通过物理架构视图更明确地表达具体目标模块及其通讯结构,如图10所示。

图10 设备调试系统的物理架构

总结

从简单系统到复杂系统的变化,对架构设计的冲击决不仅仅是量变的问题。通过引入了软件架构视图的概念,有助于软件架构师控制架构设计的复杂性。

软件架构视图的概念和软件架构基本概念是完全相容的,后者针对软件系统的整体目标,而前者针对特定目标子集,这样一来,重点突出了,问题明确了,软件架构师的经验也就活跃了起来。

逻辑架构和物理架构相分离的设计方法在软件实践中比较常用。逻辑架构和物理架构是软件架构设计的重要方面。逻辑架构致力于将软件系统分解成不同的逻辑单元,并规定这些逻辑单元之间的交互接口和交互机制。物理架构则更重视软件系统运行时的动态结构,以及组成软件系统的目标程序如何部署到硬件上。

逻辑架构和物理架构在架构设计中的应用相关推荐

  1. 逻辑建模与物理建模_架构层和建模域逻辑

    逻辑建模与物理建模 在讨论用于建模域逻辑(例如事务脚本,表模块,域模型)的PoEAA模式时,我注意到人们对域模型模式是最好的印象(尽管印象不对). 因此,他们开始将其应用于所有内容. 不配领域模型模式 ...

  2. FPGA学习及设计中的注意事项

    为什么80%的码农都做不了架构师?>>>    FPGA学习及设计中的注意事项 1.基础问题 FPGA的基础就是数字电路和HDL语言,想学好FPGA的人,建议床头都有一本数字电路的书 ...

  3. amd处理器更新zen4服务器芯片,AMD的CPU、GPU路线图更新:Zen4设计中 硬件光追可期...

    AMD今年7月份同时推出了7nm工艺的锐龙3000及Navi架构的RX 5700系列显卡,这对AMD来说是一次重大变化,因为是CPU.GPU两大业务同时升级架构.工艺,这也为未来两年的产品奠定了基础. ...

  4. 浅谈架构师之逻辑架构和物理架构

    转自:微点阅读(www.weidianyuedu.com)微点阅读 - 范文大全 - 免费学习知识的网站 在实际工作中,我们经常听到"架构"和"架构师"这样的名 ...

  5. 《系统架构:复杂系统的产品设计与开发》——第3章,第3.4节特殊的逻辑关系...

    本节书摘来自华章出版社<系统架构:复杂系统的产品设计与开发>一书中的第3章,第3.4节特殊的逻辑关系,作者[美]布鲁斯·卡梅隆,更多章节内容可以访问云栖社区"华章计算机" ...

  6. 《.NET应用架构设计:原则、模式与实践》新书博客--试读-1.3 架构设计中的重要概念...

    1.3  架构设计中的重要概念 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&quo ...

  7. 架构设计中服务层的简单理解

    在ddd设计中我们经常会提到服务层,服务层是什么?职责是什么?有什么好处?. 先看简单的层次图(注:这里并没有考虑其他多余的领域逻辑数据层存储,或者UOW这些细节) 我的理解是服务层是处于我的应用程序 ...

  8. 微服务架构 接口交互问题_架构师的故事:设计微服务架构

    架构师在软件项目中的作用是提供待解决问题的工作模型.架构师的工作是提供脚手架,开发人员将根据这些脚手架构建他们的代码,使应用程序所有部件都组合在一起. 在构建微服务架构时,项目的架构师主要关注以下3个 ...

  9. 架构设计中的方法学(五)

    在定义了架构愿景之后,团队中的所有人员应该对待开发的软件有一定的了解了.但是,面对一个庞大的软件系统,接下来要做些什么呢?分而治之的思想是计算机领域非常重要的思想,因此我们也从这里开始入手. 要进行应 ...

  10. 数据仓库系列(四)数仓架构以及多维数据模型的设计

    文章目录 一.前言 二.数据仓库的定义 三.数据仓库的特点 四.数据仓库的作用 五.数据仓库的架构 六.数据仓库的要求 七 .数据仓库分层 八.数据仓库四个层次的划分 8.1 ODS层 8.2 PDW ...

最新文章

  1. VC:其他控件(CProgressCtrl、CScrollBar、CDateTimeCtrl、CMonthCalCtrl)
  2. java爬虫下载付费html网页模板
  3. PAT甲级 -- 1148 Werewolf - Simple Version (20 分)
  4. STL之Map完整(Linux内核)内部实现
  5. ES11新特性_String.prototype.matchAll方法---JavaScript_ECMAScript_ES6-ES11新特性工作笔记063
  6. SQL2008数据库的备份与还原
  7. back to wuxi
  8. 免登录实现CSDN博客代码复制(2021.9.26)
  9. lightroom安卓_【安卓】多功能视频编辑器和手机专业修图软件
  10. unity 随机获取三个字的名字
  11. 重新定义高端存储架构,华为Dorado V6树立全闪存新标杆
  12. 小程序设置appId
  13. 当社群本身具备活跃性,我们应该做什么
  14. C++ 算法篇 动态规划----区间动态规划
  15. GO+Selenium批量关注各大网站实战 2 (今日头条,批量关注)
  16. 王道书P41 T24(单链表实现)
  17. 考验逻辑思维能力的软件_23个经过时间考验的应用程序,可以管理您的远程软件开发团队...
  18. c#期末考试知识点_c#期末考试复习题
  19. mac VM fusion7 安装 win7教程
  20. Windows10共享打印机出现0x0000007c的问题,切实可行的解决方案

热门文章

  1. python 模拟键盘_用Python模拟键盘输入
  2. bugku misc-旋转跳跃
  3. JNA实战系列:JNA与C语言中的数据类型映射以及复杂结构体传参示例
  4. myeclipse使用(技术和快捷键)
  5. AD单片机九齐单片机NY8B062D SOP16九齐
  6. windows系统设置定时开关机的方法
  7. 十年外贸人的心得:开发国外客户的正确思路和方法
  8. php fpm 测试,php-fpm – 配置详解(转)
  9. xp计算机无法正常启动,修复XP系统无法正常启动进入不了计算机的解决办法
  10. python找不同_用Python玩大家来找茬