閱讀726 返回首頁    go 阿裏雲 go 技術社區[雲棲]


架構風格

  • 管道-過濾器風格:每個構建都有一組輸入和輸出,數據輸入構建,經過內部處理,然後產生數據輸出。
  • 主程序-子程序:麵向過程的架構,所有的計算構件作為子程序協作工作,並由一個主程序順序的調用這些子程序,構件用共享存儲區交換數據。
  • 麵向對象風格:麵向對象架構風格的特征是將數據標識和基本操作封裝在對象中。這種模式的構件是對象,對象維護自身表示的完整性,對象之間通過消息機製進行通信,對象交互時需要知道彼此的標識,通過對象之間的協作完成計算過程。
    麵向對象好處:
    1. 可以自然映射到現實對象上,易於理解和編程(傳統的說法)
    2. 低耦合:OO的繼承和多態使得服務提供者可以僅提供接口,而將具體實現推遲到運行時,從而降低調用者和被調用者之間的耦合。(解耦是為了適應變化
    3. 高類聚:OO是將數據,和對數據的操作綁定在一個類中,並通過可見性約束,隻暴露給Client應該看見的操作和變量。(內聚是為了重用
    4. 因為低耦合,高內聚,所以提供了更好的可維護、可重用、可擴展、靈活性。
  • 事件驅動風格(隱式調用):係統中的其他構件中的過程在一個或多個事件中注冊,當一個事件被觸發,係統自動調用在這個事件中注冊的所有過程。實例,數據庫係統,用戶界麵。
  • 分層(C/S,B/S, 三層, n層結構)
    三層:展現層,業務層,數據庫層
    n層:在三層的基礎上,將業務層劃分為多層的模塊。
  • C2風格:構件與構件之間的直接連接是不允許的,件之間的通訊是通過以連接件為中介的異步消,交換機製來實現的,構件相對獨立,構件之間依賴性較少。
    實例:有多個Client端的和一個Sever端的聊天工具,ClientA發消息給ClientB需要經過Sever連接轉發。
  • 倉庫風格:在倉庫(Repository)風格中,有兩種不同構件:中央數據結構(共享數據)說明當前狀態,獨立構件在中央數據存儲上執行。共享數據可以是傳統數據庫,也可以是黑板係統。實例,智能係統。
  • 回調機製:回調機製是一種常見的設計模型,他把工作流內的某個功能,按照約定的接口暴露給外部使用者,為外部使用者提供數據,或要求外部使用者提供數據。
  • 虛擬機風格:解釋器;基於規則的係統。實例,Java虛擬機,解釋執行的程序。
  • 過程控製環路(閉環):控製環路風格是將過程輸出的指定屬性維護在一個特定的參考值(設定值),將事務處理看成輸入、加工、輸出、反饋、再輸入的一個持續的過程模型。實例,空調的溫度自動調節器(設定值是溫度),巡航係統(設定值是速度)。
     閉環控製是根據控製對象輸出反饋來進行校正的控製方式,它是在測量出實際與計劃發生偏差時,按定額或標準來進行糾正的。閉環控製,從輸出量變化取出控製信號作為比較量反饋給輸入端控製輸入量,一般這個取出量和輸入量相位相反,所以叫負反饋控製,自動控製通常是閉環控製。比如家用空調溫度的控製
  • 微內核:
    用例:Windows NT 操作係統,JBoss Web服務器
    優點:
    1. 靈活性和擴展性。微內核係統把最小核心功能同擴展功能和特定應用分離開來,使係統高內聚、低耦合、可以用plug-in的形式對應用進行擴展。
    2. 係統具有更高的可移植性。
    3. 健壯性,微內核係統將許多服務移植到用戶空間,二者各自占用獨立的內存空間,某個具體應用本身的錯誤或存在的問題不會影響內核的正常運行。並且模塊各自獨立的設計也可以把安全問題分解,使係統服務程序嚴格按照安全要求運行。
    4. 策略和機製的分離,從某種意義上講微內核體係結構模式是一種特殊的層體係結構,這種把核心功能、擴展功能和特定應用分離,分處在不同的抽象層,分別實現機製和策略的思想,進一步體現了係統設計的高內聚、低耦合。
  • 回調機製
    回調(Callback)機製是一種常見的設計模型,他把工作流內的某個功能,按照約定的接口暴露給外部使用者,為外部使用者提供數據,或要求外部使用者提供數據。

=======================================================

軟件模塊之間總是存在著一定的接口,從調用方式上,可以把他們分為三類:同步調用、回調和異步調用。

 

同步調用:一種阻塞式調用,調用方要等待對方執行完畢才返回,它是一種單向調用;

回      調:一種雙向調用模式,也就是說,被調用方在接口被調用時也會調用對方的接口;

異步調用:一種類似消息或事件的機製,不過它的調用方向剛好相反,接口的服務在收到某種訊息或發生某種事件時,會主動通知客戶方(即調用客戶方的接口)。

回調和異步調用的關係非常緊密:使用回調來實現異步消息的注冊,通過異步調用來實現消息的通知。



黑板係統(Blackboard system):

黑板模型主要由“黑板”、知識源(Knowledge Source)和控製機構三大部分組成。


  • 黑板
    所謂黑板,就是一個分層的全局工作區(或稱全局數據庫)。它用來存儲初始數據、中間結果和最終結果。整個黑板被分為若幹層,每一層用於描述領域問題的某一類信息。高層信息可以看作是下層信息的抽象(或整體),反之,下層信息可以看作是上層信息的實例(或部分)。
  • 知識源
     所謂知識源,就是一個知識模塊。黑板結構中具有多個知識源,每個知識源能用來完成某些特定的解題功能。知識源可以表示完成過程、規則集或邏輯斷言等形式。一個知識源可以視為一個大規則,其條件部分稱為知識源先決條件,動作部分稱為知識源體。知識源的先決條件一旦與黑板狀態匹配,該知識源便被激活,這時知識源體執行,其結果將導致黑板狀態的變化。知識源之間互相獨立,它們隻能通過黑板進行通訊和互相調用。
  • 控製機構
    控製機構是求解問題的推理機構,由監督程序和調度程序組成。監督程序時刻注視著黑板狀態,根據黑板狀態采用某種策略選擇合適的知識源。將其條件部分放入調度隊列,隨後條件部分與黑板狀態匹配,若匹配成功,則將其動作部分放入調度隊列。動作部分的執行便又改變了黑板狀態。調度程序通過選擇所謂“聚焦”來優先使用隊列中最重要、最有希望的知識源來執行。

黑板模型是一種適時推理模型,即係統能按最適宜的原則自行決定什麼時候和怎樣使用知識。在黑板模型中,解空間被組織成層次性結構,層次結構中每一層上的信息都表示局部解,相應層次上的知識模塊對這種信息進行處理,生成更高級的局部解,直到最後的解。

理想的黑板模型中沒有控製機製,知識源含有領域知識且是自驅動的。這樣,每個知識源都“注視”著黑板上的狀態信息,而且能“適時”地決定是否要對黑板進行操作。所以,在理想黑板模型中,各知識源實際上是並行執行的(這非常類似於現在的股票交易),但在現有的串行環境下這種並行卻難以實現。因此,才增設了控製機製等方法把黑板變成串行係統(這又類似於拍賣過程)。當然,這樣就限製了黑板模型的潛在功效。



麵向對象設計原則:

設計原則名稱

設計原則簡介

重要性

單一職責原則

(Single
Responsibility Principle, SRP)

類的職責要單一,不能將太多的職責放在一個類中。

開閉原則

(Open-Closed
Principle, OCP)

軟件實體對擴展是開放的,但對修改是關閉的,即在不修改一個軟件實體的基礎上去擴展其功能。

裏氏代換原則

(Liskov
Substitution Principle, LSP)

在軟件係統中,一個可以接受基類對象的地方必然可以接受一個子類對象。

依賴倒轉原則

(Dependency
Inversion Principle, DIP)

要針對抽象層編程,而不要針對具體類編程。

接口隔離原則

(Interface
Segregation Principle, ISP)

使用多個專門的接口來取代一個統一的接口。

合成複用原則

(Composite Reuse
Principle, CRP)

在係統中應該盡量多使用組合和聚合關聯關係,盡量少使用甚至不使用繼承關係。

迪米特法則

(Law of Demeter,
LoD)

一個軟件實體對其他實體的引用越少越好,或者說如果兩個類不必彼此直接通信,那麼這兩個類就不應當發生直接的相互作用,而是通過引入一個第三者發生間接交互。




最後更新:2017-04-02 15:15:07

  上一篇:go 微軟“十招” 讓雲端的數據中心更綠色
  下一篇:go NSLocalizedString 實現國際化