前言 简单整理一下分层。 正文 应用程序分层,分为: 1.领域模型层 2.基础设施层 3.应用层 4.共享层 共享层 共享层一般包括下面几个类库。 有一个Core 的类库,比如说BLog.Core. 这个类库用来,主要用来承载一些基础简单的类型,比如说一下帮助类。 共享层的抽象层。 比如说有一个Blog.
前言 简单整理一下路由和终节点。 正文 路由方式主要有两种: 1.路由模板方式 2.RouteAttribute 方式 路由约束: 1.类型约束 2.范围约束 3.正则表达式 4.是否必选 5.自定义 IRootConstaint URL 生成 1.LinKGenerator 2.IUrlHelper 先搭建一个swagger: services.AddSwaggerGen(c =>
前言 简单整理一下静态中间件。 正文 我们使用静态文件调用: app.UseStaticFiles(); 那么这个默认会将我们根目录下的wwwroot作为静态目录。 这个就比较值得注意的,可能刚开始学.net core 的小伙伴,会直接把脚本写在更目录script这样是访问不到的。 当然了,你可以配置参数。可以给Use
前言 简单介绍一下.net core的中间件。 正文 官方文档已经给出了中间件的概念图: 和其密切相关的是下面这两个东西: IApplicationBuilder 和 RequestDelegate(HttpContext context) IApplicationBuilder : public interface IApplicationBuilder { IServiceProvider ApplicationS
前言 购优惠 https://m.fenfaw.cn/ 简单整理一下事务。 正文 事务有四大特性: 1.原子性(atomicity) 一个事务必须被视为一个不可分割的最小单元。 2.一致性(consistency) 数据库总是从一个一致性的状态转换到另一个一致性的状态。 很多人对事务的一致性和原子性可能会有偏差。
前言 简单介绍一下事务隔离的基本 正文 Read Uncommitted(未提交读) 这个就是读未提交。就是说在事务未提交的时候,其他事务也可以读取到未提交的数据。 这里举一个例子,还是前一篇的例子。 假如一个张表A=500,B=300,(500,300)有一个事务a和一个事务b,a事务是给A增加100,然后给B减少100
前言 简单整理一下事务。 正文 事务有四大特性: 1.原子性(atomicity) 一个事务必须被视为一个不可分割的最小单元。 2.一致性(consistency) 数据库总是从一个一致性的状态转换到另一个一致性的状态。 很多人对事务的一致性和原子性可能会有偏差。要理解这个东西呢,首先要抛开mysql,
前言 对于后端开发来说,打交道最多的应该是数据库了,因为你总得把东西存起来。 或是mongodb或者redis又或是mysql。然后你发现一个问题,就是他们都有日志系统,那么这些日志用来干什么的呢? 举两个例子,回滚和同步。 回滚,这里的回滚是比如说一条语句增加了1,然后再减一吗?这里的回滚操作并
前言 什么是结构化呢? 结构化,就是将原本没有规律的东西进行有规律话。 就比如我们学习数据结构,需要学习排序然后又要学习查询,说白了这就是一套,没有排序,谈如何查询是没有意义的,因为查询算法就是根据某种规律得到最佳的效果。 同样日志结构话,能够让我们得到一些好处。如果说容易检索,
前言 前文介绍了一些基本思路,那么这里介绍一下,服务如何与配置文件配合。 正文 服务: public interface ISelfService { void ShowLog(); } public class SelfService : ISelfService { public ILogger<SelfService> _Logger; public SelfService(ILogger<SelfService> logge
前言 准备整理mysql的基础篇了,前面整理了sql语句序列的的《sql 语句系列(八百章)》,感觉很多用不上,就停下来了,后续还是会继续整理。 mysql 基础篇主要是对一些基础进行整理,同时望请大佬能够指点一二。之所以整理mysql,而不是sql server,一个是因为sql server 相对来说稳定,同时sql serve
前言 本节开始整理日志相关的东西。先整理一下日志的基本原理。 正文 首先介绍一下包: Microsoft.Extengsion.Logging.Abstrations 这个是接口包。 Microsoft.Extengsion.Logging 这个是实现包 Microsoft.Extengsion.Logging.Console 这个是扩展包 代码如下: static void Ma
前言 简单整理一些配置的验证。 正文 配置的验证大概分为3类: 直接注册验证函数 实现IValidteOptions 使用Microsoft.Extensions.Options.DataAnnotations 直接注册验证函数 服务: public class SelfService : ISelfService { IOptionsMonitor<SelfServiceOption> _optio
前言 前文讲述了,服务和配置直接的配合,这一节写一下,当配置文件修改了,每个服务如何感知自己的配置。 正文 服务感知到自己的配置发生变化,这就牵扯出两个东西: IoptionsMonitor<out TOptions> IoptionSnapshot<out TOptions> 在作用域范围使用IoptionSnapshot,在单例中使用IoptionsM
前言 前面基本介绍了,官方对于asp .net core 设计配置和设计服务的框架的一些思路。看下服务和配置之间是如何联系的吧。 正文 服务: public interface ISelfService { string ShowOptionName(); } public class SelfService : ISelfService { IOptions<SelfServiceOption> _opt
前言 在当今在互联网微服务比较适用的情况下,docker 可以说一个利器。每次我们打包docker的时候都是适用docker 的配置文件,那么配置文件里面会设置环境变量,这个时候需要我们的应用能够识别到这些环境变量并作出相应的选择。 适用场景: docker 运行环境 k8s 运行环境 因为他们都是隔
前言 前文提及到了当我们的配置文件修改了,那么从 configurationRoot 在此读取会读取到新的数据,本文进行扩展,并从源码方面简单介绍一下,下面内容和前面几节息息相关。 正文 先看一下,如果文件修改,那么是否有一个回调函数,可以回调呢? 答案是有的: IChangeToken IConfiguration.GetReloa
前言 在asp .net core 中我们会看到一个appsettings.json 文件,它就是我们在服务中的各种配置,是至关重要的一部门。 不管是官方自带的服务,还是我们自己编写的服务都是用它来实现自己服务的动态配置,这就是约定。 配置文件之所以会成为约定,最主要的原因就是好用,不然可能第三方的配置
前言 该章演示依赖注入中,对象的释放行为。 紧接上文表示,演示: services.AddSingleton<IMySingletonService, MySingletonService>(); services.AddSingleton<IMySingletonService>(new MySingletonService()); services.AddSingleton<IMySingletonService>(ServiceProvider => {
前言 本来想整理到<<重新整理.net core 计1400篇>>里面去,但是后来一想,整理 .net core 实践篇 是偏于实践,故而分开。 因为是重新整理,那么就从配置开始整理。以下只是个人理解,如有错误,望请指点谢谢。 正文 在我们创建好一个应用的时候,那么出现在我们视野的是一个这样的东西: public
前言 简单介绍一下死锁,以及解决死锁的办法。 正文 死锁发生的必要条件 1.互斥条件:只有对必须互斥使用的资源的争夺才会导致死锁,内存、扬声器是不会导致死锁的。 2.进程所获取的资源在未使用完成之前,不能其他进程抢夺。 3.进程已经保持了至少一个资源,但又提出新的资源请求,而该资源
前言 为什么产生管程这个东西呢? 以前我该系列中,提及到有信号量这个概念,但是呢,信号量有个问题那就是编写代码复杂容易出问题。 而且信号量写的不好,还可能出现死锁问题。 比如说p1先请求s1,然后请求s2;p2先请求s2然后请求s1。 然后p1请求到s1,p2请求到52,然后这两个就都无法执行了,这种问
前言 大纲: 正文 原则: 单标志法 缺点: trun 表示当前允许进入临界区的进程号,而只有当前允许进入临界区的进程在访问临界区后,才能修改turn的值。 两个进程如果相互等待,那么会形成一个轮流访问的过程。那么会产生一个问题,那就是资源空闲的时候,按理说p1应该是可以执行的, 但是由于p0
前言 什么是进程互斥呢?这其实是一个资源利用问题。 资源共享方式,有两种一种是互斥共享一种是同时共享。 这里再次解释一下,同时共享是宏观的,微观可能不是同时,比如读取文件。 正文 一个时间段内只允许一个进程使用的资源称为临界资源,比如说硬件上摄像头,还有变量、数据、内存缓冲区