软件架构

概述

  • 从需求分析到软件设计之间的过渡过程称为软件架构
  • 架构设计就是需求分配,将满足需求的职责分配到组件上
  • 软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构件的描述构件的相互作用(连接件)指导构件集成的模式以及这些模式的约束组成
  • 软件架构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构件之间的对应关系,提供了一些设计决策的基本原理
  • 解决好软件的复用、质量和维护问题是研究软件架构的根本目的
  • 软件架构设计包括提出架构模型产生架构设计进行设计评审等活动,是一个迭代的过程
  • 架构设计主要关注软件组件的结构、属性和交互作用,并通过多种视图全面描述特定系统的架构
  • 软件架构能够在设计变更相对容易的阶段,考虑系统结构的可选方案,便于技术人员和非技术人员就软件设计进行交互,能够展现软件的结构、属性与内部交互关系
  • 软件架构是项目干系人进行交流的手段,明确了对系统实现的约束条件,决定了开发和维护组织的组织结构,制约着系统的质量属性
  • 软件架构使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础
  • 软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量

构件

  • 构件是一个独立可交付的功能单元,外界通过接口访问其提供的服务
  • 构件由一组通常需要同时部署的原子构件组成
  • 一个原子构件是一个模块和一组资源
  • 原子构件是部署、版本控制和替换的基本单位
  • 原子构件通常成组地部署,但是它也能够被单独部署
  • 构件和原子构件之间的区别在于:大多数原子构件永远都不会被单独部署,尽管它们可以被单独部署。相反大多数原子构件都属于一个构件家族,一次部署往往涉及整个家族
  • 一个模块是不带单独资源的原子构件
  • 一个单独的包被编译成多个单独的类文件
  • 模块是一组类和可能的非面向对象的结构体,比如过程或者函数

特性

一个构件可以包含多个类元素,但是一个类元素只能属于一个构件

  • 独立部署单元
  • 作为第三方的组装单元
  • 没有(外部的)可见状态

对象特性

  • 一个实例单元,具有唯一的标志
  • 可能具有状态,此状态外部可见
  • 封装了自己的状态和行为

构件接口

接口标准化是对接口中消息的格式、模式和协议的标准化。它不是要将接口格式化为参数化操作的集合,而是关注输入输出的消息的标准化,它强调当机器在网络中互连时,标准的消息模式、格式、协议的重要性

面向构件编程 COP

关注于如何支持建立面向构件的解决方案。面向构件编程需要下列基本的支持

  • 多态性(可替换性)
  • 模块封装性(高层次信息的隐藏)
  • 后期的绑定和装载(部署独立性)
  • 安全性(类型和模块安全性)

构件标准

构件技术就是利用某种编程手段,将一些人们所关心的,但又不便于让最终用户去直接操作的**细节进行了封装,同时对各种业务逻辑规则进行了实现
**,用于处理用户的内部操作细节。常用的构件标准:

  • EJB:规范由Sun公司制定,有三种类型的 EJB,分别是会话Bean(Session Bean)实体 Bean(Entity Bean)消息驱动 Bean(
    Message-driven Bean)。EJB 实现
    应用中关键的业务逻辑,创建基于构件的企业级应用程序**
  • COM、DCOM、COM+:COM是微软公司的。DCOM是COM的进一步扩展,具有位置独立性和语言无关性。COM+是COM的新发展或是更高层次的应用,不是COM新版本
  • CORBA标准:主要分为三个层次:对象请求代理公共对象服务公共设施
    • 最底层是对象请求代理ORB,规定了分布对象的定义(接口)和语言映射,实现对象间的通讯和互操作,是**分布对象系统中的“软总线”
    • 在 ORB 之上定义了很多公共服务,可以提供诸如并发服务、名字服务、事务(交易)服务、安全服务等各种各样的服务
    • 最上层的公共设施则定义了组件框架,提供可直接为业务对象使用的服务,规定业务对象有效协作所需的协定规则

软件架构风格

软件架构风格

闭环风格

C2体系风格

层次架构风格

两层 C/S 架构

客户端和服务端都有处理能力

两层 C/S 架构

三层 C/S 架构

将处理功能独立出来,表示层和数据层都变得简单。表示层在客户机上,功能层在应用服务器上,数据层在数据库服务器上。三层 C/S 架构设计的
关键在于各层之间的通信效率。优点:

  • 各层在逻辑上保持相对独立
  • 允许灵活有效地运用相应的平台和硬件系统
  • 各层可以并行开发
  • 功能层有效地格力表示层和数据层,整个系统的管理层次更加合理和可控制
三层 C/S 架构

三层 B/S 架构

三层 C/S 架构的变种,将客户端变为用户客户端上的浏览器,将应用服务器变为网络上的WEB服务器,又称为0客户端架构

富互联网应用RIA

RIA 是一种用户接口,比用 HTML 实现的接口更加健壮,且有可视化内容,本质还是网站模式,本质还是0客户端,借助于*
高速网速实现必要插件在本地的快速缓存*,增强页面对动态页面的支持能力,典型的如小程序。优点:

  • RIA 结合了 C/S 架构反应速度快、交互性强的优点与 B/S 架构传播范围广及容易传播的特性
  • RIA 简化并改进了 B/S 架构的用户交互
  • 数据能够被缓存在客户端,从而可以实现一个比基于 HTML 的响应速度更快且数据往返于服务器的次数更少的用户界面

面向服务的架构风格 SOA

SOA 是一种粗粒度、松耦合的服务架构,服务之间通过简单、精确定义接口进行通信,不涉及底层变成接口和通信模型。在 SOA 中,服务是一种为了满足某项业务需求的操作、规则等的逻辑组合,它包含一系列有序活动的交互,为实现用户目标提供支持。SOA
并不仅仅是一种开发方法,还具有管理上的优点,管理员可直接管理开发人员所构建的相同服务。多个服务通过企业服务总线提出服务请求,由应用管理来进行处理

SOA 结构

实施 SOA 的关键目标是实现企业IT资产重用的最大化,在实施 SOA 过程中的特征:

  • 可从企业外部访问
  • 随时可用:服务请求能被及时响应
  • 粗粒度接口:粗粒度提供一项特定的业务功能,而细粒度服务代表了技术构件方法
  • 服务分级
  • 松散耦合:服务提供者和服务使用者分离
  • 可重用的服务及服务接口设计管理
  • 标准化的接口:WSDL、SOAP、XML 是核心
  • 支持各种消息模式
  • 精确定义的服务接口

基于对象基于构件再到基于服务架构越来越松散耦合,粒度越来越粗,接口越来越标准。基于服务的构件和传统构件的区别:

  1. 服务构件粗粒度,传统构件细粒度居多
  2. 服务构件的接口是标准的,主要是WSDL接口,而传统构件常以具体 API 形式出现
  3. 服务构件的实现和语言是无关的,而传统构件常绑定某种特定的语言
  4. 服务构件可以通过构件容器提供QoS的服务,而传统构件完全由程序代码直接控制

知识点

  1. 系统构件组装分为三个不同层次:定制(Customization)集成(Integration)扩展(Extension)
  2. CORBA 服务端构件模型中,伺服对象(Servant)
    CORBA 对象的真正实现,负责完成客户端请求
  3. J2EE 核心组成
    • 容器:Applet Container、Application Container、Web Container、EJB Container
    • 组件:Applet、Application、JSP/Servlet、EJB
    • 服务:
      1. HTTP(Hypertext Transfer Protocol)超文本传输协议
      2. RMI-IIOP(Remote Method Invocation ober the Internet Inter-ORB Protocol):远程方法调用,融合了Java RMI 和CORBA(Common Object Rrquest Broker Architecture 公共对象请求代理体系结构) 在使用Application 或Web 端访问EJB 端组件是使用
      3. Java IDL(Java Interface Definition Language):Java 接口定义语言,主要用于访问外部的CORBA 服务
      4. JTA(Java Transaction API):用于进行事务处理操作的 API
      5. JDBC(Java Database Connectivity):为数据库操作提供的一组API
      6. JMS(Java Massage Service):用于发送点对点消息的服务
      7. JavaMail: 用于发送邮件
      8. JAF(Java Activation Framework):用于封装传递的邮件数据
      9. JNDI(Java Naming and Directory Interface )
      10. JAXP(Java API for XML Parsing ):专门用于XML解析操作的API
      11. JCA(J2EE Connector Architecture ):Java 连接器构架
      12. JAAS (Java Authenticati on and Authorization Service)
      13. JSF (Java Server Faces)
      14. JSTL (JSP Standard Tag Library)
      15. SAAJ (SOAP with Attachments API for JAVA)
      16. JAXR (Java ApI for XML Registries)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容