ASP.NET Core 中 HTTP 管道使用中间件组合处理的方式。换句人话来说,对于写代码的人而言,一切皆中间件。业务逻辑/数据访问/等等一切都需要以中间件的方式来呈现。
设计模式之行为模式
行为型模式共有十一种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
- 策略模式 :封装不同的算法,算法之间能互相替换
- 状态模式 :根据不同的状态做出不同的行为
- 责任链模式 :将事件沿着链去处理
- 观察者模式 :状态发生改变时通知观察者,一对多的关系
- 模板方法模式 :定义一套流程模板,根据需要实现模板中的操作
- 迭代器模式 :提供一种方法顺序访问一个聚合对象中的各个元素
- 备忘录模式 :保存对象的状态,在需要时进行恢复
- 访问者模式 :稳定数据结构中,定义新的操作行为
- 中介者模式 :将网状结构转变为星型结构,所有行为都通过中介
- 解释器模式 :定义语法,并对其进行解释
- 命令模式 :将请求封装成命令,并记录下来,能够撤销与重做
设计模式之结构型模式
结构型模式包括适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式和代理模式。
- 适配器模式注重转换接口,将不吻合的接口适配对接
- 桥接模式注重分离接口与其实现,支持多维度变化
- 组合模式注重统一接口,将“一对多”的关系转化为“一对一”的关系
- 装饰者模式注重稳定接口,在此前提下为对象扩展功能
- 外观模式注重简化接口,简化组件系统与外部客户程序的依赖关系
- 享元模式注重保留接口,在内部使用共享技术优化对象存储
- 代理模式注重假借接口,增加间接层来实现灵活控制
.Net Core 3.1 使用Autofac
在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期.
微软给自行注入的服务,提供了3种生命周期.
Transient(瞬时的)
每次请求时都会创建的瞬时生命周期服务。这个生命周期最适合轻量级,无状态的服务。
Scoped(作用域的)
在同作用域,服务每个请求只创建一次。
Singleton(唯一的)
全局只创建一次,第一次被请求的时候被创建,然后就一直使用这一个.
自带的IOC 并不支持AOP(面向切面编程),所以我们最好还是使用Autofac.
.NET开源分布式事务解决方案-CAP
CAP 是一个在分布式系统中(SOA,MicroService)实现事件总线及最终一致性(分布式事务)的一个开源的 C# 库,她具有轻量级,高性能,易使用等特点。
你可以轻松的在基于 .NET Core 技术的分布式系统中引入CAP,包括但限于 ASP.NET Core 和 ASP.NET Core on .NET Framework。
- CAP 以 NuGet 包的形式提供,对项目无任何入侵,你仍然可以以你喜爱的方式来构建分布式系统。
- CAP 具有 Event Bus 的所有功能,并且CAP提供了更加简化的方式来处理EventBus中的发布/订阅。
- CAP 具有消息持久化的功能,也就是当你的服务进行重启或者宕机时,她可以保证消息的可靠性。
- CAP 实现了分布式事务中的最终一致性,你不用再去处理这些琐碎的细节。
- CAP 提供了基于 Microsoft DI 的 API 服务,她可以和你的 ASP.NET Core 系统进行无缝结合,并且能够和你的业务代码集成支持强一致性的事务处理。
- CAP 是开源免费的。CAP基于MIT协议开源,你可以免费的在你的私人或者商业项目中使用,不会有人向你收取任何费用。
分布式事务常用解决方案
业界目前主流的分布式事务解决方案主要有:多阶段提交方案(2PC、3PC)、本地消息表、补偿事务(TCC)和消息事务(主要是RocketMQ)。这些方案的原理在此处不展开,目前网络中相应资料比较多,小结一下它们的特点
分布式事务理论
说到事务,可能大家首先想到的就是数据库事务。对于数据库事务可能大家都很熟悉,在开发过程中也会经常使用到。众所周知,数据库能实现本地事务,但现在的系统常采用微服务、SOA等架构,因此就出现了跨多个数据库的事务需求,这种事务即为“分布式事务”。
分布式事务一直是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免,本文就分布式事务来简单聊一下。
C# 8中的范围类型(Range Type)
三种MySql避免重复插入记录方法
mysql在存在主键冲突或者唯一键冲突的情况下,根据插入策略不同,一般有以下三种避免方法:
1、insert ignore
2、replace into
3、insert on duplicate key update
注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用以上三个语句没有意义,与使用单纯的INSERT INTO相同。
layui table 工具栏列隐藏状态本地永久化保存
由于table列比较多,有时候用户不需要看那么多列,虽然layui提供了隐藏列的接口。但页面刷新后就会复原,这时候就可以将数据保存至localStorage中实现本地永久化保存