概述
- 從需求分析到軟件設(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)格

閉環(huán)風(fēng)格
C2體系風(fēng)格
層次架構(gòu)風(fēng)格
兩層 C/S 架構(gòu)
客戶端和服務(wù)端都有處理能力

三層 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)的管理層次更加合理和可控制

三層 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)行處理

實(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ū)別:
- 服務(wù)構(gòu)件粗粒度,傳統(tǒng)構(gòu)件細(xì)粒度居多
- 服務(wù)構(gòu)件的接口是標(biāo)準(zhǔn)的,主要是WSDL接口,而傳統(tǒng)構(gòu)件常以具體 API 形式出現(xiàn)
- 服務(wù)構(gòu)件的實(shí)現(xiàn)和語言是無關(guān)的,而傳統(tǒng)構(gòu)件常綁定某種特定的語言
- 服務(wù)構(gòu)件可以通過構(gòu)件容器提供QoS的服務(wù),而傳統(tǒng)構(gòu)件完全由程序代碼直接控制
知識點(diǎn)
- 系統(tǒng)構(gòu)件組裝分為三個不同層次:定制(Customization)、集成(Integration)和擴(kuò)展(Extension)
- CORBA 服務(wù)端構(gòu)件模型中,伺服對象(Servant)是
CORBA 對象的真正實(shí)現(xiàn),負(fù)責(zé)完成客戶端請求 - J2EE 核心組成
- 容器:Applet Container、Application Container、Web Container、EJB Container
- 組件:Applet、Application、JSP/Servlet、EJB
- 服務(wù):
- HTTP(Hypertext Transfer Protocol)超文本傳輸協(xié)議
- 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 端組件是使用
- Java IDL(Java Interface Definition Language):Java 接口定義語言,主要用于訪問外部的CORBA 服務(wù)
- JTA(Java Transaction API):用于進(jìn)行事務(wù)處理操作的 API
- JDBC(Java Database Connectivity):為數(shù)據(jù)庫操作提供的一組API
- JMS(Java Massage Service):用于發(fā)送點(diǎn)對點(diǎn)消息的服務(wù)
- JavaMail: 用于發(fā)送郵件
- JAF(Java Activation Framework):用于封裝傳遞的郵件數(shù)據(jù)
- JNDI(Java Naming and Directory Interface )
- JAXP(Java API for XML Parsing ):專門用于XML解析操作的API
- JCA(J2EE Connector Architecture ):Java 連接器構(gòu)架
- JAAS (Java Authenticati on and Authorization Service)
- JSF (Java Server Faces)
- JSTL (JSP Standard Tag Library)
- SAAJ (SOAP with Attachments API for JAVA)
- JAXR (Java ApI for XML Registries)