軟體設計要素初探 元件化思想

2022-01-13 09:53:25 字數 1876 閱讀 1501

在 「軟體設計要素初探」 一文,嘗試從軟體設計的整體角度,綜合討論了軟體設計的各種要素。本文討論用於系統劃分的元件化思想。

將整個系統劃分為若干正交的緊密關聯的子系統,以及高內聚低耦合的小而美的模組與微服務,理清職責、互動與邊界。劃分的基本原則是「識別、分離和組合關注點」。每個子系統必定有其核心關注點和基礎關注點,而基礎關注點中交疊的部分,即是子系統互動定義的基礎。

元件化是可靈活組合和可定製的前提,是構建大型軟體應用的核心思想。元件化的基本技巧是「識別和分離關注點」。心裡沒有「關注點」概念的開發者,寫**時比較隨意,在實現功能時無意識將多個關注點摻雜在一起,當關注點發生變化需要重組時,「for-ififelseif-for-ifelseif-switch」的噩夢開始誕生了。而善於「識別和分離關注點」的開發者則會想辦法把這些關注點解耦開,實現成簡潔可組合的短小函式、方法和類,並置於該歸屬的地方。元件化的另乙個基本技巧是「面向介面程式設計」:先建立所需要的元件介面,然後建立基於元件介面的應用骨架,最後根據需求和場景建立和注入具體實現。儘管有時這種做法顯得「有點過度設計」,卻更有易於理解系統流程。

元件化可以從不同粒度上進行。

(1) 單個應用。單個應用內的元件化,主要是將單一關注點的邏輯功能元件化,能夠靈活組合和配置;亦可將緊密關聯的小組件串聯成更大粒度的更實用的元件。比如乙個訂單匯出應用,其流程是:訂單搜尋 -> 訂單詳情獲取與拼接 -> 訂單過濾 -> 詳情資料格式化 -> 結合報表模板生成報表 -> 上傳報表檔案。將每個步驟定義成乙個元件介面(訂單搜尋元件介面、獲取詳情元件介面、訂單過濾元件介面、訂單詳情格式化元件介面、報表生成器元件介面、上傳檔案元件介面),再定義乙個全域性控制器,將元件介面串聯成匯出流程,而具體的匯出實現只要傳入指定元件介面的具體實現即可。訂單搜尋可以從db查詢,亦可以從 es 查詢;訂單詳情可以從api介面獲取,亦可以從hbase獲取。為保證大批量資料匯出的效能,減少業務資料庫和業務介面的壓力,推薦使用 es + hbase 組合。

元件化之後,亦容易實現可定製化。 比如有的匯出只需要匯出 es 表裡的記錄;有的匯出只需要匯出 hbase 表裡的記錄;而略微複雜的匯出則需要從 es 和 hbase 同時獲取資料。這就需要根據引數配置對元件進行靈活組合。

(2) 多個應用構成了更大粒度的領域服務元件。一些網際網路企業開始推行「服務化架構」,每個服務化工程就是乙個元件。比如訂單管理元件可由訂單搜尋/訂單詳情/資料同步/發貨元件/訂單匯出元件等組成;交易服務元件可由下單服務元件、訂單管理元件、逆向交易元件以及輔助元件(比如交易訊息推送元件、核銷元件)組成。

(3) 多個特定領域服務元件構成更大粒度的行業服務。比如交易、營銷、商品、會員等服務元件可構成電商saas的雲服務能力。比如擁有完整微**能力並致力於移動零售領域的有讚云

嘗試從更大範圍的系統領域來思考和設計元件以及元件之間的協作結構。比如訂單匯出需要從es和hbase搜尋訂單和獲取訂單詳情,而es和hbase的訂單資料則依賴於從訊息、db或api介面進行資料獲取和儲存的資料同步元件。因此,大資料儲存設計、資料同步對於訂單匯出的整體設計尤為重要。

訂單匯出的比較棘手的乙個問題是,資料來源通常來自於多個分散的業務表,這樣導致同步設計重而且不靈活。如果制定一種標準,需要匯出的字段必須落在下單表的字段或擴充套件欄位裡,那麼就可以有效地解決資料來源分散的問題,而集中精力於解決匯出可擴充套件可配置的問題。此時,下單、同步、匯出成為密切關聯的一體化設計。當從單系統上難以尋求解決方案時,不妨從更大系統範圍去發現。

建立元件,定製元件,設計和復用元件協作結構,組合出更大結構的元件,從而能夠建立更大型更綜合的大規模軟體系統。

設計優良的系統,通常有乙個清晰的元件化的骨架。元件化的骨架,就是可定製和可擴充套件的基礎支撐。

C 軟體設計思想

一,如何設計出優秀的軟體系統?優秀的軟體系統,必須是易擴充套件 易維護 高可復用性的。要做出這樣的系統,就要採用物件導向的設計思想。如果我們的設計僅僅符合物件導向的三大特徵,這並不是很好的物件導向的軟體設計。真正的物件導向的軟體設計是要遵循物件導向的五大原則,五大原則的核心原則是開放封閉原則,即我們...

軟體設計三要素

三個基本元素 架構 系統 脈絡 變元。架構 描述了系統包含的基本模組以及模組之間的關係。脈絡 描述了系統中資料或者功能的處理流程。變元 用於改善系統各個方面所引入的元素,可能是模組 資料或者任何可能的因素。脈絡包括功能脈絡和資料脈絡,功能脈絡描述了系統實現某個功能所經過的處理過程,資料脈絡描述了系統...

軟體設計 結構化設計 McCabe

從工程管理的角度,將軟體設計分為 從技術的角度,將軟體設計分為 傳入模組 從下屬模組取資料,進行某些處理,再將資料傳送給上級模組。傳出模組 從上級模組取得資料,進行處理,傳送給下屬模組。變換模組 從上級模組取得資料,進行處理,送回原上級模組。協調模組 對其下屬模組進行控制和管理的模組。用來測量程式控...