.NET 云原生架构师训练营(设计原则设计模式)--学习笔记

 点击上方“DotNet NB”关注公众号

回复“1”获取开发者路线图

08fa86b129931a1f98089902c00204a7.gif

学习分享 丨作者 / 郑 子 铭    

这是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 从网络监听

093d200197d0fd7fdb79c9c7cfee9af5.png

意图:定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中

何时使用:有多种类型需要根据特定的场景进行创建实例时(或单个对象的创建过程比较复杂时)

外观模式:Kestrel Server 到请求执行调度

973f80beb116cda840180f9ffbcbf2dc.png

为子系统中的一组接口提供一个一致的界面。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 中

d7d9ca818630b21a69ab21fbfda4983f.png

除了 SocketTransportFactory,还有 QuicTransportFactory,它是 HTTP/3 协议的监听器

b0404e8816f13b5c71dbc5ffc75d8027.png

多种实现最后都由 TransportManager 进行统一的管理

4dccfbb1af7a36687ff37ed7efa62c5a.png

工厂方法符合开闭原则,后期有新的类型的时候,只需要添加新的类型和对应的工厂即可。不需要对代码逻辑进行修改

课程链接

.NET云原生架构师训练营讲什么,怎么讲,讲多久

推荐阅读:

《Kubernetes全栈架构师(Kubeadm高可用安装k8s集群)--学习笔记》

《.NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记》

《.NET Core开发实战(第1课:课程介绍)--学习笔记》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt qss设置字体大小_Qt编写自定义控件70-扁平化flatui

一、前言对于现在做前端开发人员来说&#xff0c;FlatUI肯定不陌生&#xff0c;最近几年扁平化的设计越来越流行&#xff0c;大概由于现在PC端和移动端的设备的分辨率越来越高&#xff0c;扁平化反而看起来更让人愉悦&#xff0c;而通过渐变色产生的质感色彩反而没有扁平化来得…

机器学习之决策树熵信息增量求解算法实现

此文不对理论做相关阐述,仅涉及代码实现: 1.熵计算公式: P为正例,Q为反例 Entropy(S) -PLog2(P) - QLog2(Q); 2.信息增量计算: Gain(S,Sv) Entropy(S) - (|Sv|/|S|)ΣEntropy(Sv); 举例: 转化数据输入: 5 14Outlook Sunny Sunny Overcast Rain Rain Rain …

centos6.4下安装jdk

centos安装好后一般默认安装好了openJDK&#xff0c;且在6.4版本下是jdk7&#xff0c;我们要将其卸载在安装jdk6 1.卸载默认安装好的jdk&#xff0c;按下图所示的命令行命令卸载jdk 2.将jdk安装包上传到/usr/local目录下(将jdk其安装到这个目录下&#xff0c;可用winSCP工具上传…

实践剖析.NET Core如何支持Cookie滑动过期和JWT混合认证、授权

【导读】为防止JWT Token被窃取&#xff0c;我们将Token置于Cookie中&#xff0c;但若与第三方对接&#xff0c;调用我方接口进行认证、授权此时仍需将Token置于请求头&#xff0c;通过实践并联系理论&#xff0c;我们继续开始整活首先我们实现Cookie认证&#xff0c;然后再次引…

简单音乐播放实例的实现,Android Service AIDL 远程调用服务

2019独角兽企业重金招聘Python工程师标准>>> Android Service是分为两种&#xff1a; 本地服务&#xff08;Local Service&#xff09;&#xff1a; 同一个apk内被调用 远程服务&#xff08;Remote Service&#xff09;&#xff1a;被另一个apk调用 远程服务需要借…

C# 使用int.TryParse,Convert.ToInt32,(int)将浮点类型转换整数时的区别

int.TryParse,Convert.ToInt32,(int) 这几种类型在将浮点类型转换整数时是有差别Convert.ToInt32则会进行四舍五入int.TryParse只能转换整数,即浮点类型全部会返回0(int)不会进行四舍五入,只取整数部分,小数点部分完全舍弃using System;public class DoubleToInt{public …

每个女孩子起床后做的第一件事......

1 假如你暴富了&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 当客服到底有多难&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 挺好的&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 每个女孩子起床后做的第一件事&#xff…

国产知名老牌 PDF 工具正式开源

文 | Travis出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;「PDF 补丁丁」是开发者 wmjordan 所开发的一款适用于 Windows 系统的多功能 PDF 文档工具箱&#xff0c;开发者最早于 2009 年开始了该程序的开发&#xff0c;如今已有十二年历史&#xff0c;…

.net Repeater知识知多少

&#xff08;一&#xff09;.net中使用Repeater绑定数据&#xff0c;并使用repeater循环出的两个值&#xff0c;赋给repeater中的div的value值。详细如下&#xff1a; 前端.net代码&#xff1a; <div class"wytz_xmlb_nr clear"><asp:Repeater ID"RpBi…

目瞪口呆!137亿年的宇宙演化,竟然如此震撼!简直颠覆想象....

▲ 点击查看1968年圣诞节&#xff0c;阿波罗8号在环月球轨道上拍摄了一张照片。这是地球拥有的第一张自拍。也让人类第一次感受到&#xff0c;原来在广阔无垠的宇宙中&#xff0c;地球不过是一个美丽而又珍贵的孤岛。1990年&#xff0c;旅行者1号完成了所有的观测使命&#xff…

Martin Fowler:数字化时代,远程与本地协同工作孰优孰劣?| IDCF

作者&#xff1a;Martin Fowler译者&#xff1a;冬哥原文&#xff1a;https://martinfowler.com/articles/remote-or-co-located.html远程工作与同地工作之间不是简单的二分法&#xff0c;相反&#xff0c;团队有多种分布模式&#xff0c;每种模式都有不同的权衡和适合的有效技…

android:自己实现能播放网络视频url的播放器

2019独角兽企业重金招聘Python工程师标准>>> android原生自带的播放器一般只能播放本地视频&#xff0c;而没有播放url的功能。不过android系统中有一个VideoView的控件可以实现这一功能。 简单实现如下&#xff1a; public class MyVideoPlay extends Activity i…

iOS调用系统相册、相机 显示中文标题

2019独角兽企业重金招聘Python工程师标准>>> 最终在info.plist设置解决问题 发现在项目的info.plist里面添加Localized resources can be mixed 设置为&#xff1a; YES&#xff08;表示是否允许应用程序获取框架库内语言&#xff09;即可解决这个问题。 转载于:htt…

使用云原生应用和开源技术的创新攻略

Kubernetes 和云原生应用的增长以及普及是现象级的。根据 IDC 的数据&#xff0c;到2025年&#xff0c;90%以上的新应用程序将是云原生的。许多客户已受益于云原生设计模型&#xff0c;让新一代应用程序更加敏捷、可靠、可扩展&#xff0c;还兼顾了安全。说到服务的开发&#x…

SVM支持向量机原理及核函数

原文链接&#xff1a;SVM支持向量机原理及核函数 转载请注明出处 支持向量机原理 大距离分类算法 1、名词解释&#xff1a; 分割超平面&#xff1a;如下图所示&#xff0c;构造一个分割线把圆形的点和方形的点分开&#xff0c;这个线称为分割超平面。支持向量&#xff1a;…

SQL对Xml字段的操作

转&#xff1a;http://www.cnblogs.com/youring2/archive/2008/11/27/1342288.html T-Sql操作Xml数据 一、前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型。用户可以创建这样的表&#xff0c;它在关系列之外还有一个或多个 XML 类型的列&#xff1b;此外&#xff0c;…

URL 路径长度限制(错误:指定的文件或文件夹名称太长)

本节讨论 URL 的构成、SharePoint 2010 构建 URL 的方式、URL 的编码和加长以及作为其他 URL 中的参数传递的方式。 SharePoint URL 的构成 SharePoint URL 的总长度等于文件夹或文件路径的长度&#xff0c;包括协议和服务器名称和文件夹或文件名称&#xff0c;以及作为 URL 的…

sklearn线性回归详解

图片若未能正常显示&#xff0c;点击下面链接&#xff1a; http://ihoge.cn/2018/Logistic-regression.html 在线性回归中&#xff0c;我们想要建立一个模型&#xff0c;来拟合一个因变量 y 与一个或多个独立自变量(预测变量) x 之间的关系。 给定&#xff1a; 数据集 {(x…