軟件架構(gòu):基礎(chǔ)概念總結(jié)


定義

軟件架構(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)用》
......

本文參考了多份資料,比較概念化,如有問題的地方,請及時指正。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,154評論 25 708
  • 原文出處:http://www.apkbus.com/blog-875309-62984.html 前言架構(gòu)設(shè)計,...
    zzj丶閱讀 1,678評論 1 24
  • 每次夜幕降臨,總會有莫名的悲傷涌上心頭。 緊張,焦慮,憤怒的小情緒交織在一起,侵蝕著我的身體。 感覺很累。 卻找不...
    泡沫伊然閱讀 207評論 3 0
  • 此時岱山路上大雨滂沱,看不清車前的路,見附近有所養(yǎng)老院,曲筱綃的車便開了進(jìn)去 話說今天也是夠衰的了,來這盯工程路上...
    野生根號三閱讀 332評論 0 1
  • 沒有你的夢,醒來總是有些失望,有你的夢,醒來卻又總是有些失落。 些許日子沒有夢到你了,不知你還好嗎? 我可以肯定的...
    你看有只螃蟹閱讀 173評論 0 0

友情鏈接更多精彩內(nèi)容