.NET 雲原生架構師訓練營(建立系統觀)--學習筆記

MingsonZheng發表於2021-12-20

目錄

  • 目標
  • ASP .NET Core
  • 什麼是系統
  • 什麼是系統思維
  • 系統分解
  • 什麼是複雜系統
  • 作業

目標

  • 通過整體定義去認識系統
  • 通過分解去簡化對系統的認識

ASP .NET Core

  • ASP .NET Core 是什麼
  • ASP .NET Core 是幹什麼的
  • Host、Server、HostApplication 與 ASP .NET Core 是什麼關係
  • ASP .NET Core 和 .NET Core 是什麼關係

ASP .NET Core 是什麼

WEB FRAMEWORK(形式)

ASP .NET Core 是幹什麼的

幫助我們快速地構建跨平臺的、現代化的、高效能的、面向雲的WEB應用程式(功能)

形式 + 功能 = 系統

你身邊看到的那些系統:

形式 功能
錘子 釘釘子
集裝箱 儲存貨物
飛機 快速傳輸人或物

結論一:系統具有形式和功能的屬性

Host、Server、HostApplication 與 ASP .NET Core 是什麼關係

它們是構成 ASP .NET Core 的一部分

形式 功能
Host 管理資源
Server 監聽和處理網路
HostApplication 封裝 HTTP 處理程式

結論二:系統由若干個(實體/部件/模組)組成,每個子實體也同時具有形式和功能屬性,能夠獨立成為一個系統

一個集裝箱可以被拆解成多個部分,每一個部分都有它的功能和屬性

ASP .NET Core + Your code = 一個新系統

原則一:系統的湧現原則

系統的整體功能大於各部件之和

- 預期的 非預期的
良好的湧現 能處理HTTP請求 很適合雲原生的場景
不良的湧現 會受到攻擊,併發高的時候會癱瘓 程式設計師寫的異常

非預期的良好的湧現:設計的時候沒想到還能這樣使用

ASP .NET Core 和 .NET Core 是什麼關係

ASP .NET Core 是 .NET Core 的一部分,負責 WEB 這一類應用程式的處理

原則二:整體原則

每個系統都作為某一個或某些個大系統的一小部分而運作,同時,每個系統中也包含一些更小的系統

例如在設計一個椅子的時候,可以把椅子放到一個房間裡面去考慮,把房間放到整個建築裡面去考慮,把建築放到整個社群裡面去考慮,社群放到整個城市規劃裡面去考慮

例如當我做 WEB FRAMEWORK 的時候只需要考慮 ASP .NET Core,但是當我需要做一個開發平臺,比如 .NET Core 的時候,就不止是 ASP .NET Core 了,它只是這個平臺上面開發 WEB 應用的東西。

除了 WEB 應用,開發平臺還需要處理控制檯應用 Console,移動端應用 Mobile,這個時候就會考慮有哪些元件除了給 ASP .NET Core 使用,同時還會給平層的或者更高層的使用。

這個時候就會抽象出 DI,Configuration,Logging 的這些部分,它們是 ASP .NET Core 的組成部分之一,但是同時它們也可以被 .NET Core 這個更大的系統裡面的其他子系統使用

當我們以整體的原則去思考的時候,可以滿足更大的系統的需要,但同時成本也會更低,設計質量也會更好,不然可能會每個子系統都設計一個 DI,Configuration,Logging,如果一開始就以一個整體去考慮,就不會這樣

當我們需要為一個大系統新增一個小系統的時候,需要考慮整體可能會帶來的影響,比如商城增加一個發放優惠券的功能,需要考慮優惠券對原來會員等級的優惠,平臺的優惠有沒有衝突,另外需要考慮優惠券對訂單系統,庫存系統,會員系統會不會有影響

所有的系統都是由實體組成,實體本身也是一個系統

所有的系統都可以作為一個實體,來構成一個更大的系統

什麼是系統

  • 系統擁有形式屬性和功能屬性
  • 系統由實體組成,且系統功能大於部分功能之和
  • 組成系統的實體同樣具備形式與功能的屬性,它們本身也是一個系統

什麼是系統思維

把你的問題、你正在處理的事情當成一個系統來看待和進行分析

比如把培訓當成一個系統來看待,它的功能是什麼?功能是能夠給系統的使用者帶來價值的東西。

培訓系統的使用者是參加培訓的人,它的功能是能夠讓參加培訓的人學有所成,這是他們獲得的價值和利益,很多系統列了功能清單,但是沒辦法描述清楚功能給使用者帶來的價值是什麼。

系統分層:

  • 一樓:理解系統是什麼?理解其意義
  • 二樓:預測某物發生變化後的情況
  • 三樓:提供決策
  • 四樓:用部件合成系統

系統分解

  • 分解系統
  • 層級分解

分解系統

分解是一種把實體分成小的部件或組成部分的方法。即分而治之。

比如培訓系統可以拆分為理論課程、實踐課程、答疑、直播、學員管理(打卡、作業、招生)

當把一個系統每一部分都拆開出來之後,每一部分都可以更加精細的設計,比如如何監督大家更好的學習(輔助系統)

層級分解

體系是用來理解並思考複雜系統的辦法。是一種其實體均處在某個層次或某個位階的系統。將分解的元素按體系進行排列,就形成了層級分解

系統思維的最高維度:用部件合成系統的方式設計系統

什麼是複雜系統

  • 簡單系統(一層)
  • 中等複雜(兩層):每一個部件的子級不超過7個,可以往上浮動2個,即最多產生81個元素
  • 複雜系統(三層):每一個部件的子級有9個,最多產生729個元素

作業

請用整體定義和體系分解兩種方式提交你對於一個系統的認識(可以是當前你公司的系統,也可以是其它的一些你所瞭解的系統。)

系統A:

形式:

功能:

體系分解:

(請補充該系統的體系分解圖,儘可能地分解到足夠深的層次 )

課程連結

https://appsqsyiqlk5791.h5.xiaoeknow.com/v1/course/video/v_5f39bdb8e4b01187873136cf?type=2

知識共享許可協議

本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。

歡迎轉載、使用、重新發布,但務必保留文章署名 鄭子銘 (包含連結: http://www.cnblogs.com/MingsonZheng/ ),不得用於商業目的,基於本文修改後的作品務必以相同的許可釋出。

如有任何疑問,請與我聯絡 (MingsonZheng@outlook.com) 。

相關文章