.NET 云原生架构师训练营(设计原则设计模式)--学习笔记
▲?點擊上方“DotNet NB”關注公眾號
回復“1”獲取開發者路線圖
學習分享?丨作者?/?鄭?子?銘????
這是DotNet?NB?公眾號的第180篇原創文章
目錄
設計原則
設計模式
設計原則
DRY (Don't repeat yourself 不要重復)
KISS (Keep it stupid simple 簡單到傻子都能看懂)
YAGNI (You Aren't Gonna Need It 你不會需要它的)
CCP 共同閉包
CRP 共同復用
高內聚、低耦合
慣例優先配置
SCO 關注點分離
ADP 無依賴環
SOLID 面向對象設計原則
SOLID
S - Single-responsiblity Principle 單一職責
O - Open-closed Principle 對修改關閉,對擴展開放
L - Liskov Substitution Principle 里氏替換
I - Interface Segregation Principle 接口隔離
D - Dependency Inversion Principle 依賴反轉
設計模式
模式通常是指那些在一些相同的領域和上下文內,解決同樣的問題。所以一定要結合具體的使用場景去了解設計模式
使用設計模式的目的是為了可重用代碼,提高代碼的可擴展性和可維護性
設計模式主要分為三種類型:創建型,結構型,行為型
創建型模式關注點是如何創建對象,其核心思想是要把對象的創建和使用相分離,這樣使得兩者能相對對立地變換
結構型模式主要涉及如何組合各種對象以便獲得更好、更靈活的結構。雖然面向對象的繼承機制提供了最基本的子類擴展父類的功能,但結構型模式不僅僅簡單地使用繼承,而更多地通過組合與運行期的動態組合來實現更靈活的功能
行為型模式主要涉及算法和對象間的職責分配。通過使用對象組合,行為型模式可以描述一組對象應該如何協作來完成一個整體任務
| 創建型 | 工廠方法:Factory Method;抽象工廠:Abstract Factory;建造者:Builder;原型:Prototype;單例:Singleton |
| 結構型 | 適配器;橋接;組合;裝飾器;外觀;享元;代理 |
| 行為型 | 責任鏈;命令;解釋器;迭代器;中介;備忘錄;觀察者;狀態;策略;模板方法;訪問者 |
工廠方法:Kestrel Server 從網絡監聽
意圖:定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類中
何時使用:有多種類型需要根據特定的場景進行創建實例時(或單個對象的創建過程比較復雜時)
外觀模式:Kestrel Server 到請求執行調度
為子系統中的一組接口提供一個一致的界面。Facade 模式定義了一個高層接口,這個接口使得這一子系統更加容易使用
符合單一職責原則,不要將過多的邏輯封裝在 TransportManager 類中
KISS 原則,KEEP IT Stupid Simple
源碼
https://github.com/dotnet/aspnetcore/
目錄 Microsoft.AspNetCore.Server.Kestrel.Core 下面的 KestrelServerImpl 類中有一個綁定方法
options.EndPoint = await _transportManager.BindAsync(options.EndPoint, connectionDelegate, options.EndpointConfig, onBindCancellationToken).ConfigureAwait(false);這個方法是通過 TransportManager 實現的,它是 Facade 模式,所以直接用了一個類來實現
在 TransportManager 的 StartAcceptLoop 方法中實現了綁定的功能,其實就是調用了其他的幾個類
private void StartAcceptLoop<T>(IConnectionListener<T> connectionListener, Func<T, Task> connectionDelegate, EndpointConfig? endpointConfig) where T : BaseConnectionContext {var transportConnectionManager = new TransportConnectionManager(_serviceContext.ConnectionManager);var connectionDispatcher = new ConnectionDispatcher<T>(_serviceContext, connectionDelegate, transportConnectionManager);var acceptLoopTask = connectionDispatcher.StartAcceptingConnections(connectionListener);_transports.Add(new ActiveTransport(connectionListener, acceptLoopTask, transportConnectionManager, endpointConfig)); }在 TransportManager 的綁定方法中使用了 _transportFactory,它就是 IConnectionListenerFactory
var transport = await _transportFactory.BindAsync(endPoint, cancellationToken).ConfigureAwait(false);IConnectionListenerFactory 轉到實現可以看到 SocketTransportFactory,它在 Transport.Sockets 中
除了 SocketTransportFactory,還有 QuicTransportFactory,它是 HTTP/3 協議的監聽器
多種實現最后都由 TransportManager 進行統一的管理
工廠方法符合開閉原則,后期有新的類型的時候,只需要添加新的類型和對應的工廠即可。不需要對代碼邏輯進行修改
課程鏈接
.NET云原生架構師訓練營講什么,怎么講,講多久
推薦閱讀:
《Kubernetes全棧架構師(Kubeadm高可用安裝k8s集群)--學習筆記》
《.NET 云原生架構師訓練營(模塊一 架構師與云原生)--學習筆記》
《.NET Core開發實戰(第1課:課程介紹)--學習筆記》
總結
以上是生活随笔為你收集整理的.NET 云原生架构师训练营(设计原则设计模式)--学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MongoDB服务无法启动,原因居然是.
- 下一篇: asp.net ajax控件工具集 Au