定義
軟件架構是指:對于軟件的各個方面做出的設計決定莺葫,包括行為上的和結構上的懂鸵。
結構上:
表示產品如何劃分多個部分爬范,以及這些部分之間的關系掸茅。
行為上:
包括外部行為和內部行為椅邓。
外部行為描述了產品如何與用戶、其他系統(tǒng)昧狮、外部設備進行交互景馁。
內部行為描述了產品組件之間的交互接口。
注意:
架構可作為一個名詞也可作為一個動詞逗鸣。
作為名詞合住,表示一組抽象、規(guī)則撒璧,即產品的結構約束透葛,像藍圖或構建規(guī)范的文檔等,它描述了要構建的對象卿樱;
作為動詞僚害,表示制作這些抽象、規(guī)則的過程殿如;
架構與設計的關系
架構是設計的一部分贡珊,通過抽象突出了一些細節(jié)最爬,而忽略了另一些細節(jié)。
突出的細節(jié):如結構门岔、行為規(guī)則爱致、組件如何裝配、應用規(guī)則等寒随;
忽略的細節(jié):組件如何具體設計糠悯、開發(fā)等;
架構主要的關注點
功能性
軟件向用戶提供哪些功能妻往?
可變性
軟件將來可能需要哪些改變互艾?哪些可能不需要改變?
性能
軟件期望將來達到怎樣的性能讯泣?
容量
多少用戶使用纫普?需要為多少用戶保存數(shù)據(jù)?
可構建性
如何構建成一組組件好渠?能夠獨立的實現(xiàn)昨稼、驗證、復用等
模塊化
如何將軟件任務分解成獨立的模塊拳锚?支持獨立開發(fā)等
安全性
數(shù)據(jù)安全如何保證假栓?權限控制?抵擋攻擊霍掺?等
生態(tài)系統(tǒng)
與其他系統(tǒng)匾荆、設備如何交互?
好的架構
對于一個軟件進行架構杆烁,架構師通常的做法是折中牙丽。
他們除了考慮基本的功能需求和品質需求外,還需要考慮投入的成本(人力连躏、財力剩岳、時間等等)贞滨。
所以架構設計是否最優(yōu)入热,沒有一個絕對的答案或正確答案。
從我們的經(jīng)驗來說晓铆,應該對架構進行評估勺良,確定它是否滿足我們的需求。
可以通過對架構師提出質詢來評估架構骄噪,尋找架構不能滿足品質關注點的風險尚困,架構師解釋如何支持各個場景。
也可以確定架構的屬性链蕊,通過建氖绿穑或模擬系統(tǒng)的一個或多個方面谬泌,判斷架構是否滿足。
類庫逻谦、框架掌实、設計模式、架構概念區(qū)別
在一些常規(guī)項目的開發(fā)過程中邦马,多少都會提到上面幾個詞匯贱鼻,
那么,他們之間具體的區(qū)別是什么呢滋将?
類庫
也可稱為工具庫邻悬,是為解決某一問題而進行的封裝。
作用:使開發(fā)者擺脫底層編碼(不必重復制造輪子)随闽,專注特定問題和業(yè)務邏輯父丰,給程序員帶來了方便。
框架
相對工具庫更宏觀掘宪,是一組協(xié)同工作的類础米,在某種程度上控制整體的結構和流程,是服務于業(yè)務的添诉。
作用:使設計者在特定領域重用整體設計(不必重復制造輪子)屁桑,也是為程序員帶來編碼約束的。
設計模式
是針對一類問題提出的行之有效的解決方案栏赴。
作用:對開發(fā)者而言蘑斧,是思想上(問題解決方案)的重用,但只是針對局部须眷。
架構
是一個軟件的最高層次的整體結構和規(guī)劃竖瘾。
相對設計模式而言,是針對軟件整體的“解決方案”花颗。
一個架構可能包含多個(0 ~ n)框架和多個(0 ~ n)工具庫捕传,
一個框架可能包含多個(0 ~ n)設計模式。
1. 一個架構可能包含多個(0 ~ n)框架和多個(0 ~ n)工具庫
例如:
一個java web項目扩劝,可包含spring/springmvc + hibernate/mybatis + ......等多個框架庸论;
工具庫就更多了,如:JSON庫棒呛、XML庫聂示、日期庫、圖片庫等簇秒;
2. 一個框架可能包含多個(0 ~ n)設計模式鱼喉。
普通開發(fā)中,常見的框架模式有很多種,如MVC/MVVM/MVP/MTV/CBD等扛禽。
以MVC為例锋边,通常,MVC可看做3個設計模式:即觀察者模式编曼、策略模式和組合模式的合體宠默。
-- 框架是大智慧,用來對軟件設計進行分工灵巧;
-- 設計模式是小技巧搀矫,對具體問題提出解決方案,以提高代碼復用率刻肄,減低耦合度瓤球。
參考:
《架構之美》
《企業(yè)架構應用》
......
本文參考了多份資料,比較概念化敏弃,如有問題的地方卦羡,請及時指正。