軟件架構(gòu)

概述

  • 從需求分析到軟件設(shè)計(jì)之間的過渡過程稱為軟件架構(gòu)
  • 架構(gòu)設(shè)計(jì)就是需求分配,將滿足需求的職責(zé)分配到組件上
  • 軟件架構(gòu)為軟件系統(tǒng)提供了一個結(jié)構(gòu)、行為和屬性的高級抽象,由構(gòu)件的描述、構(gòu)件的相互作用(連接件)指導(dǎo)構(gòu)件集成的模式以及這些模式的約束組成
  • 軟件架構(gòu)不僅指定了系統(tǒng)的組織結(jié)構(gòu)和拓?fù)浣Y(jié)構(gòu),并且顯示了系統(tǒng)需求和構(gòu)件之間的對應(yīng)關(guān)系,提供了一些設(shè)計(jì)決策的基本原理
  • 解決好軟件的復(fù)用、質(zhì)量和維護(hù)問題是研究軟件架構(gòu)的根本目的
  • 軟件架構(gòu)設(shè)計(jì)包括提出架構(gòu)模型,產(chǎn)生架構(gòu)設(shè)計(jì)進(jìn)行設(shè)計(jì)評審等活動,是一個迭代的過程
  • 架構(gòu)設(shè)計(jì)主要關(guān)注軟件組件的結(jié)構(gòu)、屬性和交互作用,并通過多種視圖全面描述特定系統(tǒng)的架構(gòu)
  • 軟件架構(gòu)能夠在設(shè)計(jì)變更相對容易的階段,考慮系統(tǒng)結(jié)構(gòu)的可選方案,便于技術(shù)人員和非技術(shù)人員就軟件設(shè)計(jì)進(jìn)行交互,能夠展現(xiàn)軟件的結(jié)構(gòu)、屬性與內(nèi)部交互關(guān)系
  • 軟件架構(gòu)是項(xiàng)目干系人進(jìn)行交流的手段,明確了對系統(tǒng)實(shí)現(xiàn)的約束條件,決定了開發(fā)和維護(hù)組織的組織結(jié)構(gòu),制約著系統(tǒng)的質(zhì)量屬性
  • 軟件架構(gòu)使推理和控制的更改更加簡單,有助于循序漸進(jìn)的原型設(shè)計(jì),可以作為培訓(xùn)的基礎(chǔ)
  • 軟件架構(gòu)是可傳遞和可復(fù)用的模型,通過研究軟件架構(gòu)可能預(yù)測軟件的質(zhì)量

構(gòu)件

  • 構(gòu)件是一個獨(dú)立可交付的功能單元,外界通過接口訪問其提供的服務(wù)
  • 構(gòu)件由一組通常需要同時部署的原子構(gòu)件組成
  • 一個原子構(gòu)件是一個模塊和一組資源
  • 原子構(gòu)件是部署、版本控制和替換的基本單位
  • 原子構(gòu)件通常成組地部署,但是它也能夠被單獨(dú)部署
  • 構(gòu)件和原子構(gòu)件之間的區(qū)別在于:大多數(shù)原子構(gòu)件永遠(yuǎn)都不會被單獨(dú)部署,盡管它們可以被單獨(dú)部署。相反大多數(shù)原子構(gòu)件都屬于一個構(gòu)件家族,一次部署往往涉及整個家族
  • 一個模塊是不帶單獨(dú)資源的原子構(gòu)件
  • 一個單獨(dú)的包被編譯成多個單獨(dú)的類文件
  • 模塊是一組類和可能的非面向?qū)ο蟮慕Y(jié)構(gòu)體,比如過程或者函數(shù)

特性

一個構(gòu)件可以包含多個類元素,但是一個類元素只能屬于一個構(gòu)件

  • 獨(dú)立部署單元
  • 作為第三方的組裝單元
  • 沒有(外部的)可見狀態(tài)

對象特性

  • 一個實(shí)例單元,具有唯一的標(biāo)志
  • 可能具有狀態(tài),此狀態(tài)外部可見
  • 封裝了自己的狀態(tài)和行為

構(gòu)件接口

接口標(biāo)準(zhǔn)化是對接口中消息的格式、模式和協(xié)議的標(biāo)準(zhǔn)化。它不是要將接口格式化為參數(shù)化操作的集合,而是關(guān)注輸入輸出的消息的標(biāo)準(zhǔn)化,它強(qiáng)調(diào)當(dāng)機(jī)器在網(wǎng)絡(luò)中互連時,標(biāo)準(zhǔn)的消息模式、格式、協(xié)議的重要性

面向構(gòu)件編程 COP

關(guān)注于如何支持建立面向構(gòu)件的解決方案。面向構(gòu)件編程需要下列基本的支持

  • 多態(tài)性(可替換性)
  • 模塊封裝性(高層次信息的隱藏)
  • 后期的綁定和裝載(部署獨(dú)立性)
  • 安全性(類型和模塊安全性)

構(gòu)件標(biāo)準(zhǔn)

構(gòu)件技術(shù)就是利用某種編程手段,將一些人們所關(guān)心的,但又不便于讓最終用戶去直接操作的**細(xì)節(jié)進(jìn)行了封裝,同時對各種業(yè)務(wù)邏輯規(guī)則進(jìn)行了實(shí)現(xiàn)
**,用于處理用戶的內(nèi)部操作細(xì)節(jié)。常用的構(gòu)件標(biāo)準(zhǔn):

  • EJB:規(guī)范由Sun公司制定,有三種類型的 EJB,分別是會話Bean(Session Bean)、實(shí)體 Bean(Entity Bean)消息驅(qū)動 Bean(
    Message-driven Bean)。EJB 實(shí)現(xiàn)
    應(yīng)用中關(guān)鍵的業(yè)務(wù)邏輯,創(chuàng)建基于構(gòu)件的企業(yè)級應(yīng)用程序**
  • COM、DCOM、COM+:COM是微軟公司的。DCOM是COM的進(jìn)一步擴(kuò)展,具有位置獨(dú)立性和語言無關(guān)性。COM+是COM的新發(fā)展或是更高層次的應(yīng)用,不是COM新版本
  • CORBA標(biāo)準(zhǔn):主要分為三個層次:對象請求代理、公共對象服務(wù)公共設(shè)施
    • 最底層是對象請求代理ORB,規(guī)定了分布對象的定義(接口)和語言映射,實(shí)現(xiàn)對象間的通訊和互操作,是**分布對象系統(tǒng)中的“軟總線”
    • 在 ORB 之上定義了很多公共服務(wù),可以提供諸如并發(fā)服務(wù)、名字服務(wù)、事務(wù)(交易)服務(wù)、安全服務(wù)等各種各樣的服務(wù)
    • 最上層的公共設(shè)施則定義了組件框架,提供可直接為業(yè)務(wù)對象使用的服務(wù),規(guī)定業(yè)務(wù)對象有效協(xié)作所需的協(xié)定規(guī)則

軟件架構(gòu)風(fēng)格

軟件架構(gòu)風(fēng)格

閉環(huán)風(fēng)格

C2體系風(fēng)格

層次架構(gòu)風(fēng)格

兩層 C/S 架構(gòu)

客戶端和服務(wù)端都有處理能力

兩層 C/S 架構(gòu)

三層 C/S 架構(gòu)

將處理功能獨(dú)立出來,表示層和數(shù)據(jù)層都變得簡單。表示層在客戶機(jī)上,功能層在應(yīng)用服務(wù)器上,數(shù)據(jù)層在數(shù)據(jù)庫服務(wù)器上。三層 C/S 架構(gòu)設(shè)計(jì)的
關(guān)鍵在于各層之間的通信效率。優(yōu)點(diǎn):

  • 各層在邏輯上保持相對獨(dú)立
  • 允許靈活有效地運(yùn)用相應(yīng)的平臺和硬件系統(tǒng)
  • 各層可以并行開發(fā)
  • 功能層有效地格力表示層和數(shù)據(jù)層,整個系統(tǒng)的管理層次更加合理和可控制
三層 C/S 架構(gòu)

三層 B/S 架構(gòu)

三層 C/S 架構(gòu)的變種,將客戶端變?yōu)橛脩艨蛻舳松系臑g覽器,將應(yīng)用服務(wù)器變?yōu)榫W(wǎng)絡(luò)上的WEB服務(wù)器,又稱為0客戶端架構(gòu)。

富互聯(lián)網(wǎng)應(yīng)用RIA

RIA 是一種用戶接口,比用 HTML 實(shí)現(xiàn)的接口更加健壯,且有可視化內(nèi)容,本質(zhì)還是網(wǎng)站模式,本質(zhì)還是0客戶端,借助于*
高速網(wǎng)速實(shí)現(xiàn)必要插件在本地的快速緩存*,增強(qiáng)頁面對動態(tài)頁面的支持能力,典型的如小程序。優(yōu)點(diǎn):

  • RIA 結(jié)合了 C/S 架構(gòu)反應(yīng)速度快、交互性強(qiáng)的優(yōu)點(diǎn)與 B/S 架構(gòu)傳播范圍廣及容易傳播的特性
  • RIA 簡化并改進(jìn)了 B/S 架構(gòu)的用戶交互
  • 數(shù)據(jù)能夠被緩存在客戶端,從而可以實(shí)現(xiàn)一個比基于 HTML 的響應(yīng)速度更快且數(shù)據(jù)往返于服務(wù)器的次數(shù)更少的用戶界面

面向服務(wù)的架構(gòu)風(fēng)格 SOA

SOA 是一種粗粒度、松耦合的服務(wù)架構(gòu),服務(wù)之間通過簡單、精確定義接口進(jìn)行通信,不涉及底層變成接口和通信模型。在 SOA 中,服務(wù)是一種為了滿足某項(xiàng)業(yè)務(wù)需求的操作、規(guī)則等的邏輯組合,它包含一系列有序活動的交互,為實(shí)現(xiàn)用戶目標(biāo)提供支持。SOA
并不僅僅是一種開發(fā)方法,還具有管理上的優(yōu)點(diǎn),管理員可直接管理開發(fā)人員所構(gòu)建的相同服務(wù)。多個服務(wù)通過企業(yè)服務(wù)總線提出服務(wù)請求,由應(yīng)用管理來進(jìn)行處理

SOA 結(jié)構(gòu)

實(shí)施 SOA 的關(guān)鍵目標(biāo)是實(shí)現(xiàn)企業(yè)IT資產(chǎn)重用的最大化,在實(shí)施 SOA 過程中的特征:

  • 可從企業(yè)外部訪問
  • 隨時可用:服務(wù)請求能被及時響應(yīng)
  • 粗粒度接口:粗粒度提供一項(xiàng)特定的業(yè)務(wù)功能,而細(xì)粒度服務(wù)代表了技術(shù)構(gòu)件方法
  • 服務(wù)分級
  • 松散耦合:服務(wù)提供者和服務(wù)使用者分離
  • 可重用的服務(wù)及服務(wù)接口設(shè)計(jì)管理
  • 標(biāo)準(zhǔn)化的接口:WSDL、SOAP、XML 是核心
  • 支持各種消息模式
  • 精確定義的服務(wù)接口

基于對象基于構(gòu)件再到基于服務(wù)架構(gòu)越來越松散耦合,粒度越來越粗,接口越來越標(biāo)準(zhǔn)?;诜?wù)的構(gòu)件和傳統(tǒng)構(gòu)件的區(qū)別:

  1. 服務(wù)構(gòu)件粗粒度,傳統(tǒng)構(gòu)件細(xì)粒度居多
  2. 服務(wù)構(gòu)件的接口是標(biāo)準(zhǔn)的,主要是WSDL接口,而傳統(tǒng)構(gòu)件常以具體 API 形式出現(xiàn)
  3. 服務(wù)構(gòu)件的實(shí)現(xiàn)和語言是無關(guān)的,而傳統(tǒng)構(gòu)件常綁定某種特定的語言
  4. 服務(wù)構(gòu)件可以通過構(gòu)件容器提供QoS的服務(wù),而傳統(tǒng)構(gòu)件完全由程序代碼直接控制

知識點(diǎn)

  1. 系統(tǒng)構(gòu)件組裝分為三個不同層次:定制(Customization)、集成(Integration)擴(kuò)展(Extension)
  2. CORBA 服務(wù)端構(gòu)件模型中,伺服對象(Servant)
    CORBA 對象的真正實(shí)現(xiàn),負(fù)責(zé)完成客戶端請求
  3. J2EE 核心組成
    • 容器:Applet Container、Application Container、Web Container、EJB Container
    • 組件:Applet、Application、JSP/Servlet、EJB
    • 服務(wù):
      1. HTTP(Hypertext Transfer Protocol)超文本傳輸協(xié)議
      2. RMI-IIOP(Remote Method Invocation ober the Internet Inter-ORB Protocol):遠(yuǎn)程方法調(diào)用,融合了Java RMI 和CORBA(Common Object Rrquest Broker Architecture 公共對象請求代理體系結(jié)構(gòu)) 在使用Application 或Web 端訪問EJB 端組件是使用
      3. Java IDL(Java Interface Definition Language):Java 接口定義語言,主要用于訪問外部的CORBA 服務(wù)
      4. JTA(Java Transaction API):用于進(jìn)行事務(wù)處理操作的 API
      5. JDBC(Java Database Connectivity):為數(shù)據(jù)庫操作提供的一組API
      6. JMS(Java Massage Service):用于發(fā)送點(diǎn)對點(diǎn)消息的服務(wù)
      7. JavaMail: 用于發(fā)送郵件
      8. JAF(Java Activation Framework):用于封裝傳遞的郵件數(shù)據(jù)
      9. JNDI(Java Naming and Directory Interface )
      10. JAXP(Java API for XML Parsing ):專門用于XML解析操作的API
      11. JCA(J2EE Connector Architecture ):Java 連接器構(gòu)架
      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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容