熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

淺析.NET架構與模式探索

2013-11-13 09:50:18  來源: .NET編程 

  什麼是架構
  
  軟件體系結構通常被稱為架構指可以預制和可重構的軟件框架結構架構尚處在發展期對於其定義學術界尚未形成一個統一的意見而不同角度的視點也會造成軟件體系結構的不同理解以下是一些主流的標准觀點
  
  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更加關注的是所謂的HighLevel Design而模式關注的重點在於通過經驗提取的准則或指導方案在設計中的應用因此在不同層面考慮問題的時候就形成了不同問題域上的Pattern模式的目標是把共通問題中的不變部分和變化部分分離出來不變的部分就構成了模式因此模式是一個經驗提取的准則並且在一次一次的實踐中得到驗證在不同的層次有不同的模式小到語言實現(如Singleton)大到架構在不同的層面上模式提供不同層面的指導根據處理問題的粒度不同從高到低模式分為個層次架構模式(Architectural Pattern)設計模式(Design Pattern)實現模式(Implementation Pattern)架構模式是模式中的最高層次描述軟件系統裡的基本的結構組織或綱要通常提供一組事先定義好的子系統指定它們的責任並給出把它們組織在一起的法則和指南比如用戶和文件系統安全策略模型N層結構組件對象服務等我們熟知的MVC結構也屬於架構模式的層次一個架構模式常常可以分解成很多個設計模式的聯合使用設計模式是模式中的第二層次用來處理程序設計中反復出現的問題例如[GOF][]總結的個基本設計模式——Factory Pattern Observer Pattern等等實現模式是最低也是最具體的層次處理具體到編程語言的問題比如類名變量名函數名的命名規則異常處理的規則等等
  
  相對於系統分析或者設計模式來說體系結構從更高的層面去考慮問題所以關注的問題就體現在不變因素上比如系統部署中更加關心應用程序的分層分級設計而在這個基礎之上提出的部署方案才是架構考慮的重點體系結構關心應用程序模式更加體現在通過技術去解決這些業務差異帶來的影響關心是否是分布式應用程序關心系統分層是如何設計也關心性能和安全因此在這樣的情況之下會考慮集群負載平衡故障遷移等等一系列技術
  
  希望通過定義的方式來區分架構和模式是不太可能的因為本來就是交互交叉和提供服務的它實際上是架構模式而不是設計模式在大部份情況下表現為下面幾個設計模式之一Strategy模式Mediator模式Composite模式Observer模式對於熟悉架構設計的系統架構師而言似乎可以用如下來解釋架構和模式之間的關系架構是HightLevel 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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.