架構那些需要注意的事兒

kiba518發表於2021-01-28

架構的定義

架構這個詞最早是跟隨著建築出現的,進入到軟體行業後,它的含義有了一些變化,但最基礎的含義還是沒有變的。本質上來說,架構是一個設計動作和實現動作;設計動作描述的是勾勒出滿足客戶戰略規劃需求的產品;實現動作描述的是將構件組合成結構的過程。

架構的分類

依據架構的定義,可以將架構分類為產品架構和軟體架構兩個大類。

在這兩個大類下,還可以繼續劃分子類,如下:

產品架構
  • 業務架構

  • 應用架構

  • 解決方案架構

軟體架構
  • 資料架構

  • 基礎結構架構

  • 特定技術架構

上面只是列出了一部分架構子分類,理論上還可以繼續劃分,但在大多數的實際生產中,通常不會有這麼詳細的分類,常態是軟體架構與產品架構都由一個人負責實現。

架構的設計方法

軟體架構有很多設計方法,每一種都有自己的核心思想;實際生產中,一個產品的生存週期中通常就只會貫徹一個設計方法。

基於設計方法搭建的框架,清晰度會更高。下面簡單介紹一下ABSD軟體設計方法。

ABSD(Architecture-Based Software Design)基於架構的軟體設計方法

ABSD軟體設計方法是遞迴的,且迭代的每一個步驟都是清晰地定義的。因此,不管設計是否完成,體系結構總是清晰的,這有助於降低體系結構設計的隨意性。

  • 架構

    在ABSD中,架構被分為三個基礎元素,分解、風格、模板。

    分解:基於一定的原則對模組進行內聚和耦合技術。如:職者分離原則,通用專用原則,技能分離原則,工作量均衡原則。

    風格:通過選擇架構風格來實現質量和業務需求。如資料流風格(TCP,UDP),呼叫返回風格(SOA,微服務),獨立構件風格(事件驅動),虛擬機器風格(叢集),倉庫風格(ERP)。

    模板:一個特殊型別的軟體元素,它使用一些已有的軟體系統的結構,描述所有這種型別的元素在共享服務和底層構造的基礎上如何進行互動。

  • 過程

    在ABSD中,軟體過程劃分為:架構需求、設計、文件化、複審、實現、演化;如下圖:

1,需求:

需求是指使用者對目標軟體系統在功能、行為、效能、設計約束等方面的期望。如果以前有類似的系統的需求,我們可以從中提取,加以利用和修改,以節省需求形成的時間,減少重複勞動,提高開發效率。

2,設計:

貫徹一種設計方法,對專案結構進行搭建,並且對關鍵功能進行一些決策(需求是決策的基礎)。設計其實也是一個迭代過程,需要不停的進化,可以使用舊有的設計元素進行組合搭建,進而減少重複勞動。

3,文件化:

通常架構是抽象的,並且擁有大量約定與配置。所以,為了讓程式設計師更好的理解架構,不去破壞框架,還必須得把架構進行文件化。架構文件要保持較新,但不要隨時保證文件最新,要保持文件的穩定性。

4,複審:

架構設計、文件化和複審是一個迭代過程。是階段性的總結,目的是發現潛在的風險,及架構設計中的缺陷和錯誤。從現實方面來說,我們很難在一個主版本的釋出之後,安排一次外部人員,使用者代表,領域專家集體參加的複審。所以通常複審需要有架構師主動在某一個階段主動進行。

5,實現:

所謂實現就是構建出一個軟體架構,即要符合設計(決策),也要便於程式設計師開發。

6,演化:

通常軟體開發過程中都會有一些方向性的修改或大型需求功能變化。在這情況下,就必須相應地修改軟體架構,以適應新的變化了的軟體需求。

架構的實現

架構的實現有很多種方法,同樣的方法,步驟也可以不同,所以,實現是多種多樣的。

理想化的環境下,設計與實現是順序進行的;但在實際生產中,設計與實現通常是同步進行,我們常見的架構順序是這樣的。

一,分解子系統和功能模組;

二,設計框架模型;

三,分析功能模組;

四,設計框架詳細。

當然,在更糟糕的實際生產環境中,這四步也相互穿插,同步進行情況也是有的。

架構重點關注問題

架構一個專案時通常要思考三個W——Who:為誰設計?What:要解決使用者的什麼問題?Why:為什麼要解決這些使用者問題?

此外還要重點關注以下問題。

  1. 理解系統要解決的問題。

  2. 認識系統特性與要解決的問題間的關係。

  3. 識別系統的核心行為。

  4. 整理系統的非功能性需求。

  5. 確定架構需求。

  6. 管理需求。

  7. 規劃系統的高層組織。

  8. 確定架構機制。

  9. 分析用例場景。

  10. 演進系統的高層組織並形成元件模型。

  11. 規劃系統的執行時架構和部署模型。

  12. 規劃系統的實現模型。

  13. 編寫核心程式碼。

  14. 驗證架構設計。

  15. 整理架構文件。

  16. 高內聚,低耦合。

結語

關於架構

架構是細節的集合,不是文件組合,不論文件編寫的多麼棒,沒有程式碼細節,都不能稱之為架構。

關於架構師

架構與架構師是不一樣的,學滿了架構知識,也不一定能成為架構師的;而不瞭解架構的內容,也不一定無法成為架構師。很多時候,架構師是與架構相反的存在,比如,文件高手往往是高階架構師。

----------------------------------------------------------------------------------------------------

注:此文章為原創,任何形式的轉載都請聯絡作者獲得授權並註明出處!
若您覺得這篇文章還不錯,請點選下方的推薦】,非常感謝!

https://www.cnblogs.com/kiba/p/14097006.html

 

 

 

 

 

相關文章