定義
軟件架構(gòu)是指:對于軟件的各個方面做出的設(shè)計決定,包括行為上的和結(jié)構(gòu)上的。
結(jié)構(gòu)上:
表示產(chǎn)品如何劃分多個部分,以及這些部分之間的關(guān)系。
行為上:
包括外部行為和內(nèi)部行為。
外部行為描述了產(chǎn)品如何與用戶、其他系統(tǒng)、外部設(shè)備進(jìn)行交互。
內(nèi)部行為描述了產(chǎn)品組件之間的交互接口。
注意:
架構(gòu)可作為一個名詞也可作為一個動詞。
作為名詞,表示一組抽象、規(guī)則,即產(chǎn)品的結(jié)構(gòu)約束,像藍(lán)圖或構(gòu)建規(guī)范的文檔等,它描述了要構(gòu)建的對象;
作為動詞,表示制作這些抽象、規(guī)則的過程;
架構(gòu)與設(shè)計的關(guān)系
架構(gòu)是設(shè)計的一部分,通過抽象突出了一些細(xì)節(jié),而忽略了另一些細(xì)節(jié)。
突出的細(xì)節(jié):如結(jié)構(gòu)、行為規(guī)則、組件如何裝配、應(yīng)用規(guī)則等;
忽略的細(xì)節(jié):組件如何具體設(shè)計、開發(fā)等;
架構(gòu)主要的關(guān)注點
功能性
軟件向用戶提供哪些功能?
可變性
軟件將來可能需要哪些改變?哪些可能不需要改變?
性能
軟件期望將來達(dá)到怎樣的性能?
容量
多少用戶使用?需要為多少用戶保存數(shù)據(jù)?
可構(gòu)建性
如何構(gòu)建成一組組件?能夠獨立的實現(xiàn)、驗證、復(fù)用等
模塊化
如何將軟件任務(wù)分解成獨立的模塊?支持獨立開發(fā)等
安全性
數(shù)據(jù)安全如何保證?權(quán)限控制?抵擋攻擊?等
生態(tài)系統(tǒng)
與其他系統(tǒng)、設(shè)備如何交互?
好的架構(gòu)
對于一個軟件進(jìn)行架構(gòu),架構(gòu)師通常的做法是折中。
他們除了考慮基本的功能需求和品質(zhì)需求外,還需要考慮投入的成本(人力、財力、時間等等)。
所以架構(gòu)設(shè)計是否最優(yōu),沒有一個絕對的答案或正確答案。
從我們的經(jīng)驗來說,應(yīng)該對架構(gòu)進(jìn)行評估,確定它是否滿足我們的需求。
可以通過對架構(gòu)師提出質(zhì)詢來評估架構(gòu),尋找架構(gòu)不能滿足品質(zhì)關(guān)注點的風(fēng)險,架構(gòu)師解釋如何支持各個場景。
也可以確定架構(gòu)的屬性,通過建?;蚰M系統(tǒng)的一個或多個方面,判斷架構(gòu)是否滿足。
類庫、框架、設(shè)計模式、架構(gòu)概念區(qū)別
在一些常規(guī)項目的開發(fā)過程中,多少都會提到上面幾個詞匯,
那么,他們之間具體的區(qū)別是什么呢?
類庫
也可稱為工具庫,是為解決某一問題而進(jìn)行的封裝。
作用:使開發(fā)者擺脫底層編碼(不必重復(fù)制造輪子),專注特定問題和業(yè)務(wù)邏輯,給程序員帶來了方便。
框架
相對工具庫更宏觀,是一組協(xié)同工作的類,在某種程度上控制整體的結(jié)構(gòu)和流程,是服務(wù)于業(yè)務(wù)的。
作用:使設(shè)計者在特定領(lǐng)域重用整體設(shè)計(不必重復(fù)制造輪子),也是為程序員帶來編碼約束的。
設(shè)計模式
是針對一類問題提出的行之有效的解決方案。
作用:對開發(fā)者而言,是思想上(問題解決方案)的重用,但只是針對局部。
架構(gòu)
是一個軟件的最高層次的整體結(jié)構(gòu)和規(guī)劃。
相對設(shè)計模式而言,是針對軟件整體的“解決方案”。
一個架構(gòu)可能包含多個(0 ~ n)框架和多個(0 ~ n)工具庫,
一個框架可能包含多個(0 ~ n)設(shè)計模式。
1. 一個架構(gòu)可能包含多個(0 ~ n)框架和多個(0 ~ n)工具庫
例如:
一個java web項目,可包含spring/springmvc + hibernate/mybatis + ......等多個框架;
工具庫就更多了,如:JSON庫、XML庫、日期庫、圖片庫等;
2. 一個框架可能包含多個(0 ~ n)設(shè)計模式。
普通開發(fā)中,常見的框架模式有很多種,如MVC/MVVM/MVP/MTV/CBD等。
以MVC為例,通常,MVC可看做3個設(shè)計模式:即觀察者模式、策略模式和組合模式的合體。
-- 框架是大智慧,用來對軟件設(shè)計進(jìn)行分工;
-- 設(shè)計模式是小技巧,對具體問題提出解決方案,以提高代碼復(fù)用率,減低耦合度。
參考:
《架構(gòu)之美》
《企業(yè)架構(gòu)應(yīng)用》
......
本文參考了多份資料,比較概念化,如有問題的地方,請及時指正。