C#的λ表达式树(LambdaExpression)

λ表达式树、lambda、委托它们之间的区别和联系 委托是一种类型,是方法的抽象,通过委托可以将方法以参数的形式传递给另一个方法,同时调用委托的时候,它缩包含的方法都会被实现。委托的关键字是delegate,可以自定义委托,也可以使用内置委托,通过简化,可以将Lambda表达式或Lambda语句赋值...

跟着 Github 学习 Restful HTTP API 设计

近几年提供 HTTP API 服务的公司越来越多,许多公司都把 API 作为产品重要的一部分,作为服务提供出去。而微服务的兴起,也让企业内部开始重视和频繁使用 HTTP API 。好的 HTTP API 设计容易理解、符合 RFC 标准、提供使用者便利的功能,其中经常被拿来作为教科书典范的当属 Gi...

Git 删除未推送的提交

场景 由于误操作,经常可能会将一些测试方法等直接选中并 commit 到了本地仓库中。但是还没有 push 出去。 这个时候,你可以用下面的方法补救。 示例 删除最近的一次 commit, 但保留已有的修改 $ git reset --soft HEAD~1 删除最近的一次 commit, 并且不...

一图看懂常用开源协议区别

首先借用有心人士的一张相当直观清晰的图来划分各种协议:开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别。 以下是上述协议的简单介绍: BSD开源协议 BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的...

从Redis读取.NET Core配置

在本文中,我们将创建一个自定义的.NET Core应用配置源和提供程序,用于从Redis中读取配置。在此之前,您需要稍微了解一些.NET Core配置提供程序的工作原理,相关的内容可以在Microsoft开发者官网搜索到。另外您可能还需要了解一些Redis的基础知识,比如Redis的基础数据类型,持...

密码强度正则表达式

密码强度正则表达式 – 必须包含大写字母,小写字母和数字,至少8个字符等 方案一 至少8-16个字符,至少1个大写字母,1个小写字母和1个数字,其他可以是任意字符: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$/ 或者: /^(?=.*[a-z])(?=.*...

编程名言

重构是程序员的主力技能。 工作日志能提升脑容量。 先用profiler调查,才有脸谈优化。 软件设计有两种方式:一种方式是,使软件过于简单,明显没有缺陷;另一种方式是,使软件过于复杂,没有明显的缺陷。 大部分情况下,构建程序的过程本质上是对规范调试的过程。 注释贵精不贵多。杜绝大姨妈般的“例注”。漫...

实现领域驱动设计——什么是DDD?

一、写在前面 今天的软件相对之前的软件,需求越来越复杂,变化越来越快。软件架构不断的在演进,一方面是为了适应新的需求,一方面也在寻找软件简单化解决方案,通过架构的规范是的软件更容易维护,逻辑更清晰。所以架构一直在追求易维护、可扩展。从早期的modle1、modle2,到现在这种微服务架构,一直在追求...

使用MediatR和FluentValidation实现CQRS应用程序的数据验证

本文将重点介绍如何通过MediatR的管道功能将FluentValidation集成到项目中实现验证功能。 什么是CQRS? CQRS(Command Query Responsibility Segregation)也叫命令查询职责分离,是近年来非常流行的应用程序架构模式。CQRS 背后的理念是在...

使用MediatR实现CQRS

CQRS和中介者模式 MediatR库主要是为了帮助开发者快速实现两种软件架构模式:CQRS和Mediator。这两种架构模式看上去似乎差不多,但还是有很多区别的。 CQRS CQRS是Command Query Responsibility Segregation的缩写,一般称作命令查询职责分离。...