.NET 云原生架构师训练营(设计原则&&设计模式)--学习笔记
目录
- 设计原则
- 设计模式
设计原则
- 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 进行统一的管理
工厂方法符合开闭原则,后期有新的类型的时候,只需要添加新的类型和对应的工厂即可。不需要对代码逻辑进行修改
相关文章
- WPF开发入门尝试
- 微软公告:ASP.NET曝漏洞 Win7等均中招
- WCF初接触实作之服务发布和使用
- WCF初次操作实践
- .NET程序员快来Visual Studio刷“成就”
- .NET垃圾回收机制知识点整理
- ASP.NET_正则表达式_匹配HTML中的一行或多行
- 利用WCF实现将服务器端的错误信息返回
- 怎样做一个快乐的ASP.NET程序员
- 为什么我们不要.NET程序员
- DDD落地,如何持久化聚合
- 迁移 dotnet 6 提示必须将目标平台设置为 Windows 平台
- C++|I/O|基于缓冲区的位级IO流
- 006: Django ajax请求
- 012:Django高级请求
- 开发者调查:C#在云应用中失去了地位 在游戏中依然大行其道
- 彻底理解 IO 多路复用实现机制
- 微软.NET 5.1迎来RC1版本 开发者已可上线尝鲜
- 速度和性能狂卷,.NET 7有多少人买单
- 风云再续:他抖任他抖,IO诊断在我手