子系統和框架出現的動機:分離關注點,或者叫封裝變化點。
如何分離關注點?
1. 可以通過職責劃分來分離。
2. 可以利用軟件系統各部分通用性的不同來劃分。
3. 可以先考慮大粒度的子系統,而暫時忽略子系統是如何通過更小粒度的模塊和類組成。
架構的分離:
1. 按照職責劃分,可以分爲表現層、業務層和數據層。
2. 按照通用性劃分,可以分爲特定應用部分、領域應用部分和技術通用部分。
3. 按照分解合成劃分,可以分爲子系統、模塊和類。
子系統和軟件架構的關係
意義:
1. 有助於避免軟件架構設計不足和高來高去的問題。
2. 有助於充分利用架構設計技能。來組合各種常見的模式,提高軟件質量。
軟件單元不同粒度的劃分
類:粒度最小的單元。
模塊:幾個類機密協作
子系統:完成相對獨立功能的多個模塊。
系統:多個子系統相互配合才能滿足一個完整應用的需求。
集成系統:一個大型企業往往使用多套系統,多套系統通過交互形成集成系統。
什麼是系統?
系統是指由多個元素組成的邏輯實體,它完成一組特定的目標或者擔負一定的職責,系統可以包括軟件,也可以包含硬件,或者兩者都有。
子系統有時也是需要進行架構設計的。
同一個系統內,不同的子系統可以採用不同的架構設計。
所有的系統都有子系統,所有的系統都是更大系統中的子系統。
軟件的粒度是相對的。由於實踐中處在的位置不同,同一個軟件單元在不同的實踐者眼中的粒度可能是不一樣的。
什麼是框架?
框架是可以通過某種回調機制進行擴展的軟件系統或子系統的半成品。
軟件重用中存在的一個內在的矛盾:‘重用概率’大小和‘重用帶來的價值’之間的矛盾。軟件單元的粒度越大,則重用帶來的價值就越大,但重用概率越小;反之,粒度小的軟件單元被重用的概率越大,帶來的價值越小。
框架與架構的區別:框架是軟件,架構不是。
框架是一種特殊的軟件,它並不能提供完整的解決方案,而是爲你構建解決方案提供良好的基礎。框架中的服務可以被最終應用系統直接使用,而框架中的擴展點是供開發人員定製的‘可變化點’。
軟件架構不是軟件,而是關於軟件如何設計的重要決策。涉及到如何將軟件系統分解成不同的部分、各部分之間的靜態結構關係和動態交互關係等。
框架和架構的關係
1. 爲了儘早驗證架構設計,或者出於支持產品線開發的目的,可以將關鍵的通用機制甚至整個架構以框架的方式進行實現。
2. 業界可能存在大量可供重用的框架,這些框架或者已經實現了軟件架構所需的重要架構機制,或者爲未來系統的某個子系統提供了可擴展的半成品,所以最終的軟件架構可以藉助這些框架來擴展。
框架也有架構。相對來說。
真實的軟件是由組件遞歸組合而成的
1. 組件的粒度可以很小,也可以很大;任何粒度的組件都可以組合成粒度更大的整體。即所謂的粒度多樣性。
2. 組件粒度的界定,必須在具體的實踐上下文中才有意義;你的大粒度組件,對我來說可能是原子組件,即所謂的粒度的相對性。
框架按照不同的分類標準可以分爲不同的類型:
1. 應用框架、中間件框架、基礎設施框架
2. 技術框架(水平框架)、業務框架(垂直框架)
3. 白盒框架、黑盒框架、灰盒框架
框架的開發過程:迭代開發方式
分析 查找目標,確定範圍
設計 識別框架通用點和擴展點
構造 實現
穩定 測試、文檔、培訓
參考文獻:
《軟件架構設計》 溫昱