设计模式之装饰模式

装饰模式 Decorator Intro 装饰模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活 使用场景 装饰模式是为已有功能动态地添加更多功能的一种方式 当系统需要新功能的时候,是向旧的类中添加新的代码,这些新加的代码通常装饰了原有类的核心职责或主要行为,但是往 ...

WeihanLi @ 2020/07/30

设计模式之组合模式

组合模式 Composite Intro 组合模式,将对象组合成树形结构以表示 “部分-整体” 的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 主要解决:它在我们树型 ...

WeihanLi @ 2020/07/28

设计模式之桥接模式

将抽象部分与它的实现部分分离,使得它们都可以独立地变化,桥接模式 ...

WeihanLi @ 2020/07/27

设计模式之适配器模式

设计模式之适配器模式 Intro 适配器模式(Adapter),将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。也被称为 Wrapper 模式。 通常这个类是外部的类,不能直接修改,所以需要做一层包装,以适配 ...

WeihanLi @ 2020/07/24

创建型设计模式总结

创建型设计模式总结 Intro 前面几篇文章已经把创建型设计模式都介绍了,来做一个简单的总结。 创建型设计模式,就是用来创建对象的设计模式,根据要创建的对象的复杂度以及是否允许多实例以及是否需要容易扩展等多方面考虑去选择合适的设计模式来创建对象。 Summary 单例模式(Singleton) 需要 ...

WeihanLi @ 2020/07/20

设计模式之原型模式

设计模式之原型模式 Intro 简介 原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 原型模式其实就是从一个对象再创建另外一个可定制的对象而且不需要知道任何创建的细节。 实现方式 实现方式大致如下: 在 c# 中可以借助 ICloneable 接口和 MemberwiseC ...

WeihanLi @ 2020/07/18

设计模式之建造者模式

设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。 需要的组件: Product 最终要构建的产品 AbstractBuilder 创建一个 Product 的抽象 bu ...

WeihanLi @ 2020/07/18

Redis 6.0 新特性 ACL 介绍

Redis 6.0 新特性 ACL 介绍 Intro 在 Redis 6.0 中引入了 ACL(Access Control List) 的支持,在此前的版本中 Redis 中是没有用户的概念的,其实没有办法很好的控制权限,redis 6.0 开始支持用户,可以给每个用户分配不同的权限来控制权限。 ...

WeihanLi @ 2020/07/18

更优雅的在 Xunit 中使用依赖注入

Xunit.DependencyInjection 7.0 发布了 Intro 上次我们已经介绍过一次大师的 Xunit.DependencyInjection https://www.cnblogs.com/weihanli/p/xuint-dependency-injection.html ,最 ...

WeihanLi @ 2020/07/16

设计模式之单例模式

设计模式之单例模式 Intro 一个类只允许创建唯一一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。 单例模式可能是大家听说最多的设计模式了,网上介绍最多的设计模式大概就是单例模式了,我看过的设计模式相关的文章很多都是写一篇介绍单例模式,然后就没有了。 经 ...

WeihanLi @ 2020/07/15

设计模式中的那些工厂

设计模式中的那些工厂 Intro 设计模式中有几个工厂模式,聊一聊这几个工厂模式的各自用法和使用示例,工厂模式包含简单工厂,抽象工厂,工厂方法,这些均属于创建型模式, 所谓创建型模式,就是说这几个设计模式是用来创建对象的。 简单工厂 首先来说一说,最简单的简单工厂 简单工厂模式是由一个工厂对象决定创 ...

WeihanLi @ 2020/07/13

闲谈设计模式

闲谈设计模式 Intro 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 了解这些前辈们总结出来的经验有助于帮助你写出来更优秀的代码,帮助你写出可扩展、可读、可维护的高质量代码。 在极客时间里推出了数据结构和设计模式的王争说了一句话,如果说“ ...

WeihanLi @ 2020/07/11

在 Xunit 中使用依赖注入

在 Xunit 中使用依赖注入 Intro 之前写过一篇 xunit 的依赖注入相关的文章,但是实际使用起来不是那么方便 今天介绍一个基于xunit和微软依赖注入框架的“真正”的依赖注入使用方式 ——— Xunit.DependencyInjection, 来自大师的作品,让你在测试代码里使用依赖注 ...

WeihanLi @ 2020/07/02

使用 nuget server 的 API 来实现搜索安装 nuget 包

使用 nuget server 的 API 来实现搜索安装 nuget 包 ...

WeihanLi @ 2020/06/28

angular 接入 IdentityServer4

angular 接入 IdentityServer4 Intro 最近把活动室预约的项目做了一个升级,预约活动室需要登录才能预约,并用 IdentityServer4 做了一个统一的登录注册中心,这样以后就可以把其他的需要用户操作的应用统一到 IdentityServer 这里,这样就不需要在每个应 ...

WeihanLi @ 2020/06/23

nuget 包是如何还原的

nuget 包如何还原,如何修改默认的 nuget 包保存位置 ...

WeihanLi @ 2020/06/21

动手造轮子:实现一个简单的 AOP 框架

动手造轮子:实现一个简单的 AOP 框架 Intro 最近实现了一个 AOP 框架 -- FluentAspects,API 基本稳定了,写篇文章分享一下这个 AOP 框架的设计。 整体设计 概览 IProxyTypeFactory 用来生成代理类型,默认提供了基于 Emit 动态代理的实现,基于接 ...

WeihanLi @ 2020/06/15

docker registry 镜像同步

docker registry 镜像同步 Intro 之前我们的 docker 镜像是保存在 Azure 的 Container Registry 里的,最近我们自己搭建了一个 docker registry,我们想把之前保存的 Azure 的 Container Registry 的 docker ...

WeihanLi @ 2020/06/13

动手造轮子:实现一个简单的依赖注入(三) --- 支持属性注入

动手造轮子:实现一个简单的依赖注入(三) 支持属性注入 Intro 前面写了几篇依赖注入的文章,有兴趣的小伙伴可以参考文末 Reference 部分中的链接,一直有小伙伴希望增加属性注入的支持,昨天试着加了一下,思路很简单,在获取到服务实例之后检查实例中有没有需要注入的属性,如果有并且不为 null ...

WeihanLi @ 2020/06/10

使用请求头认证来测试需要授权的 API 接口

使用请求头认证来测试需要授权的 API 接口 Intro 有一些需要认证授权的接口在写测试用例的时候一般会先获取一个 token,然后再去调用接口,其实这样做的话很不灵活,一方面是存在着一定的安全性问题,获取 token 可能会有一些用户名密码之类的测试数据,还有就是获取 token 的话如果全局使 ...

WeihanLi @ 2020/06/09