什麼是架構 軟件體系結構通常被稱為架構
指可以預制和可重構的軟件框架結構
架構尚處在發展期
對於其定義
學術界尚未形成一個統一的意見
而不同角度的視點也會造成軟件體系結構的不同理解
以下是一些主流的標准觀點
ANSI/IEEE
軟件工程標准詞匯對於體系結構定義是
體系架構是以構件
構件之間的關系
構件與環境之間的關系為內容的某一系統的基本組織結構以及知道上述內容設計與演化的原理(principle)
Mary Shaw和David Garlan認為軟件體系結構是軟件設計過程中
超越計算中的算法設計和數據結構設計的一個層次
體系結構問題包括各個方面的組織和全局控制結構
通信協議
同步
數據存儲
給設計元素分配特定功能
設計元素的組織
規模和性能
在各設計方案之間進行選擇
Garlan & Shaw模型[
]的基本思想是
軟件體系結構={構件(component)
連接件(connector)
約束(constrain)}.其中構件可以是一組代碼
如程序的模塊
也可以是一個獨立的程序
如數據庫服務器
連接件可以是過程調用
管道
遠程過程調用(RPC)等
用於表示構件之間的相互作用
約束一般為對象連接時的規則
或指明構件連接的形式和條件
例如
上層構件可要求下層構件的服務
反之不行
兩對象不得遞規地發送消息
代碼復制遷移的一致性約束
什麼條件下此種連接無效等
關於架構的定義還有很多其他觀點
比如Bass定義
Booch & Rumbaugh &Jacobson定義
Perry & Wolf模型[
]
Boehm模型等等
雖然各種定義關鍵架構的角度不同
研究對象也略有側重
但其核心的內容都是軟件系統的結構
其中以Garlan & Shaw模型為代表
強調了體系結構的基本要素是構件
連接件及其約束(或者連接語義)
這些定義大部分是從構造的角度來甚至軟件體系結構
而IEEE的定義不僅強調了系統的基本組成
同時強調了體系結構的環境即和外界的交互
什麼是模式 模式(Pattern)的概念最早由建築大師Christopher Alexander於二十世紀七十年代提出
應用於建築領域
八十年代中期由Ward Cunningham和Kent Beck將其思想引入到軟件領域
Christopher Alexander將模式分為三個部分
首先是周境(Context
也可以稱著上下文)
指模式在何種狀況下發生作用
其二是動機(System of Forces)
意指問題或預期的目標
其三是解決方案(Solution)
指平衡各動機或解決所闡述問題的一個構造或配置(Configuration)
他提出
模式是表示周境
動機
解決方案三個方面關系的一個規則
每個模式描述了一個在某種周境下不斷重復發生的問題
以及該問題解決方案的核心所在
模式即是一個事物(thing)又是一個過程(process)
不僅描述該事物本身
而且提出了通過怎樣的過程來產生該事物
這一定義已被軟件界廣為接受
軟件模式的應用對軟件開發產生了重大的作用
主要表現在
軟件模式是人們在長期的設計軟件
管理組織軟件開發等實踐中大量經驗的提煉和抽象
是復用軟件設計方法
過程管理經驗的有力工具
模式類似於拳擊中的組合拳
它提供了一系列軟件開發中的思維套路
如
通過模式的使用
有利於在復雜的系統中產生簡潔
精巧的設計
軟件模式為我們提供了一套簡潔通用的設計
管理
組織方面的詞匯
同時模式也為我們提供了一個描述抽象事物的規范標准
可大大促進軟件開發過程中人與人之間的交流
而軟件開發中的交流是至關重要的
軟件項目失敗的原因最終都可追溯到信息沒有及時准確地傳遞到應該接收它的人
架構和模式的關系 因為架構(Architecture)和模式(Pattern)在當前的軟件開發中經常地被提及
可是很多人容易混淆這兩個術語
而對此
學術界也沒有一個非常統一的定義
架構和模式應該是一個屬於相互涵蓋的過程
但是總體來說Architecture更加關注的是所謂的High
Level Design
而模式關注的重點在於通過經驗提取的
准則或指導方案
在設計中的應用
因此在不同層面考慮問題的時候就形成了不同問題域上的Pattern
模式的目標是
把共通問題中的不變部分和變化部分分離出來
不變的部分
就構成了模式
因此
模式是一個經驗提取的
准則
並且在一次一次的實踐中得到驗證
在不同的層次有不同的模式
小到語言實現(如Singleton)大到架構
在不同的層面上
模式提供不同層面的指導
根據處理問題的粒度不同
從高到低
模式分為
個層次
架構模式(Architectural Pattern)
設計模式(Design Pattern)
實現模式(Implementation Pattern)
架構模式是模式中的最高層次
描述軟件系統裡的基本的結構組織或綱要
通常提供一組事先定義好的子系統
指定它們的責任
並給出把它們組織在一起的法則和指南
比如
用戶和文件系統安全策略模型
N
層結構
組件對象服務等
我們熟知的MVC結構也屬於架構模式的層次
一個架構模式常常可以分解成很多個設計模式的聯合使用
設計模式是模式中的第二層次
用來處理程序設計中反復出現的問題
例如
[GOF
][
]總結的
個基本設計模式——Factory Pattern
Observer Pattern等等
實現模式是最低也是最具體的層次
處理具體到編程語言的問題
比如
類名
變量名
函數名的命名規則
異常處理的規則等等
相對於系統分析或者設計模式來說
體系結構從更高的層面去考慮問題
所以關注的問題就體現在
不變
因素上
比如系統部署中
更加關心應用程序的分層分級設計
而在這個基礎之上提出的部署方案
才是架構考慮的重點
體系結構關心應用程序模式
更加體現在通過技術去解決這些業務差異帶來的影響
關心是否是分布式應用程序
關心系統分層是如何設計
也關心性能和安全
因此在這樣的情況之下
會考慮集群
負載平衡
故障遷移等等一系列技術
希望通過定義的方式來區分架構和模式是不太可能的
因為本來就是交互交叉和提供服務的
它實際上是架構模式
而不是設計模式
在大部份情況下
表現為下面幾個設計模式之一
Strategy模式
Mediator模式
Composite模式
Observer模式
對於熟悉架構設計的系統架構師而言
似乎可以用如下來解釋架構和模式之間的關系
架構是Hight
Level Design
著眼於不同業務中共性的解決方案
而模式是General Principle(通用原理)
企業解決方案的構建模式 企業級業務解決方案是公司實現其業務的賭注
它們通常極其復雜
而且性能必須不負眾望
它們不僅必須具有高可用性和伸縮性以應對不可預知的使用
而且還必須具有適應性和預見性以適應快速變化的業務要求
最佳解決方案是那些由一組更小的
簡單的
能夠可靠且有效地解決簡單問題的機制組成的解決方案
在構建更大
更復雜的系統過程中
將這些簡單的機制組合在一起
從而形成更大的系統
對這些簡單機制的認識來之不易
它通常存在於有經驗的開發人員和體系結構設計者的頭腦中
並且是他們潛意識中自然帶到項目中的重要知識
模式對於開發人員和體系結構設計者非常有用
因為它們
記錄能夠正常工作的簡單機制
為開發人員和體系結構設計者提供通用的詞匯和分類法
允許以模式組合的方式簡明扼要地描述方案
允許重復使用體系結構
設計和實現決策
模式可以記錄簡單機制
模式描述給定上下文中反復出現的問題
並基於一組指導性影響因素來建議解決方案
解決方案通常是一種簡單的機制
是為了解決模式中所標示出的問題而一起工作的兩個或多個類
對象
服務
進程
線程
組件或節點之間的協作
您正在構建一個報價應用程序
其中有一個類負責管理系統中的所有報價
很重要的一點是
所有報價都應與該類的一個(而且只與一個)實例進行交互
如何構造您的設計
以便從該應用程序中只能訪問該類的一個實例?
解決該問題最簡單的方案就是創建一個具有私用構造函數的QuoteManager類
以便任何其他類都不能實例化它
此類包含QuoteManager的一個靜態實例
並使用名為GetInstance()的靜態方法返回
此代碼大體如下所示
public class QuoteManager
{
//注意
僅適用於單線程應用程序
private static QuoteManager _Instance = null;
private QuoteManager() {}
public static QuoteManager GetInstance()
{
if (_Instance==null)
{
_Instance = new QuoteManager ();
}
return _Instance;
}
//
QuoteManager提供的函數
}
您可能已經像其他許多開發人員那樣通過類似的方式解決過類似的問題
實際上
注意反復出現的問題並尋求解決方案的模式作者已經屢次發現了這種實現
提取出了通用解決方案並將這種問題
解決方案對稱為Singleton模式[GOF
]
問題
解決方案對模式
圖
簡化的Singleton模式
通過將圖
中簡化的模式示例與QuoteManager源代碼進行比較
闡明了模式(通用問題
解決方案對)和模式應用程序(針對非常具體的問題的具體解決方案)之間的區別
模式級別的解決方案是多個類之間簡單但極其順暢的協作
模式中的通用協作專門適用於QuoteManager類
提供了用來控制報價應用程序中實例化的機制
顯然
您可以稍微修改一下某種模式以滿足局部的特定要求
所以同一種模式可以應用於無數個應用程序
所編寫的模式提供了一種記錄簡單且經過證實的機制的有效方法
模式是以特定格式編寫的
這一點對於裝載復雜思想的容器非常有用
這些模式在被記載和起名之前
就早已存在於開發人員的大腦及其代碼中
From:http://tw.wingwit.com/Article/program/net/201311/11709.html