架構的定義
架構這個詞最早是跟隨著建筑出現的,進入到軟體行業后,它的含義有了一些變化,但最基礎的含義還是沒有變的,本質上來說,架構是一個設計動作和實作動作;設計動作描述的是勾勒出滿足客戶戰略規劃需求的產品;實作動作描述的是將構件組合成結構的程序,
架構的分類
依據架構的定義,可以將架構分類為產品架構和軟體架構兩個大類,
在這兩個大類下,還可以繼續劃分子類,如下:
產品架構
-
業務架構
-
應用架構
-
解決方案架構
軟體架構
-
資料架構
-
基礎結構架構
-
特定技術架構
上面只是列出了一部分架構子分類,理論上還可以繼續劃分,但在大多數的實際生產中,通常不會有這么詳細的分類,常態是軟體架構與產品架構都由一個人負責實作,
架構的設計方法
軟體架構有很多設計方法,每一種都有自己的核心思想;實際生產中,一個產品的生存周期中通常就只會貫徹一個設計方法,
基于設計方法搭建的框架,清晰度會更高,下面簡單介紹一下ABSD軟體設計方法,
ABSD(Architecture-Based Software Design)基于架構的軟體設計方法
ABSD軟體設計方法是遞回的,且迭代的每一個步驟都是清晰地定義的,因此,不管設計是否完成,體系結構總是清晰的,這有助于降低體系結構設計的隨意性,
-
架構
在ABSD中,架構被分為三個基礎元素,分解、風格、模板,
分解:基于一定的原則對模塊進行內聚和耦合技術,如:職者分離原則,通用專用原則,技能分離原則,作業量均衡原則,
風格:通過選擇架構風格來實作質量和業務需求,如資料流風格(TCP,UDP),呼叫回傳風格(SOA,微服務),獨立構件風格(事件驅動),虛擬機風格(集群),倉庫風格(ERP),
模板:一個特殊型別的軟體元素,它使用一些已有的軟體系統的結構,描述所有這種型別的元素在共享服務和底層構造的基礎上如何進行互動,
-
程序
在ABSD中,軟體程序劃分為:架構需求、設計、檔案化、復審、實作、演化;如下圖:

1,需求:
需求是指用戶對目標軟體系統在功能、行為、性能、設計約束等方面的期望,如果以前有類似的系統的需求,我們可以從中提取,加以利用和修改,以節省需求形成的時間,減少重復勞動,提高開發效率,
2,設計:
貫徹一種設計方法,對專案結構進行搭建,并且對關鍵功能進行一些決策(需求是決策的基礎),設計其實也是一個迭代程序,需要不停的進化,可以使用舊有的設計元素進行組合搭建,進而減少重復勞動,
3,檔案化:
通常架構是抽象的,并且擁有大量約定與配置,所以,為了讓程式員更好的理解架構,不去破壞框架,還必須得把架構進行檔案化,架構檔案要保持較新,但不要隨時保證檔案最新,要保持檔案的穩定性,
4,復審:
架構設計、檔案化和復審是一個迭代程序,是階段性的總結,目的是發現潛在的風險,及架構設計中的缺陷和錯誤,從現實方面來說,我們很難在一個主版本的發布之后,安排一次外部人員,用戶代表,領域專家集體參加的復審,所以通常復審需要有架構師主動在某一個階段主動進行,
5,實作:
所謂實作就是構建出一個軟體架構,即要符合設計(決策),也要便于程式員開發,
6,演化:
通常軟體開發程序中都會有一些方向性的修改或大型需求功能變化,在這情況下,就必須相應地修改軟體架構,以適應新的變化了的軟體需求,
架構的實作
架構的實作有很多種方法,同樣的方法,步驟也可以不同,所以,實作是多種多樣的,
理想化的環境下,設計與實作是順序進行的;但在實際生產中,設計與實作通常是同步進行,我們常見的架構順序是這樣的,
一,分解子系統和功能模塊;
二,設計框架模型;
三,分析功能模塊;
四,設計框架詳細,
當然,在更糟糕的實際生產環境中,這四步也相互穿插,同步進行情況也是有的,
架構重點關注問題
架構一個專案時通常要思考三個W——Who:為誰設計?What:要解決用戶的什么問題?Why:為什么要解決這些用戶問題?
此外還要重點關注以下問題,
-
理解系統要解決的問題,
-
認識系統特性與要解決的問題間的關系,
-
識別系統的核心行為,
-
整理系統的非功能性需求,
-
確定架構需求,
-
管理需求,
-
規劃系統的高層組織,
-
確定架構機制,
-
分析用例場景,
-
演進系統的高層組織并形成組件模型,
-
規劃系統的運行時架構和部署模型,
-
規劃系統的實作模型,
-
撰寫核心代碼,
-
驗證架構設計,
-
整理架構檔案,
-
高內聚,低耦合,
結語
關于架構
架構是細節的集合,不是檔案組合,不論檔案撰寫的多么棒,沒有代碼細節,都不能稱之為架構,
關于架構師
架構與架構師是不一樣的,學滿了架構知識,也不一定能成為架構師的;而不了解架構的內容,也不一定無法成為架構師,很多時候,架構師是與架構相反的存在,比如,檔案高手往往是高級架構師,
----------------------------------------------------------------------------------------------------
注:此文章為原創,任何形式的轉載都請聯系作者獲得授權并注明出處!
若您覺得這篇文章還不錯,請點擊下方的【推薦】,非常感謝!
https://www.cnblogs.com/kiba/p/14097006.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/253927.html
標籤:其他
下一篇:springcloud vue.js 微服務分布式 flowable 作業流 前后分離 集成代碼生成器 shiro權限
