masaframework -- i18n (国际化)-编程思维

概念 作为一个普通开发者, 我们负责的项目的使用群体大多数是本国的人民, 但不可避免的也有一些做外贸的业务或者给外企做的项目, 这个时候就要求我们的项目有服务全球客户的能力, 而一个支持国际化能力的框架会让我们项目的体验变得更好. 关于本地化我们听到最多的是I18N、L10N、G11N, 那它们分别代表了什么意思呢? I18N: 是"Internationalization" 的缩写, 由于

masaframework -- 领域驱动设计_磊_磊-编程思维

概念 什么是领域驱动设计 领域驱动的主要思想是, 利用确定的业务模型来指导业务与应用的设计和实现。主张开发人员与业务人员持续地沟通和模型的持续迭代,从而保证业务模型与代码的一致性,实现有效管理业务的复杂度,优化软件设计的目的 痛点 基于领域驱动设计的模型有很多难点需要克服 统一认知 语言统一, 领域模型术语、DDD模式名称、技术专业术语、设计模式、业务术语等统一为大家都能认可且理解的名词,

命令查询职责分离_cqrs_磊_磊-编程思维

概念 CQRS是一种与领域驱动设计和事件溯源相关的架构模式, 它的全称是Command Query Responsibility Segregation, 又叫命令查询职责分离, Greg Young在2010年创造了这个术语, 它是基于Bertrand Meyer 的 CQS (Command-Query Separation 命令查询分离原则) 设计模式。 CQRS认为不论业务多复杂在最终实

masa framework -- 跨进程事件 integrationeventbus入门与设计_磊_磊-编程思维

概述 跨进程事件总线允许发布和订阅跨服务传输的消息, 服务的发布与订阅不在同一个进程中 在Masa Framework中, 跨进程总线事件提供了一个可以被开箱即用的程序 IntegrationEvents: 提供了发件箱模式 IntegrationEvents.Dapr: 借助Dapr实现了消息的发布 EventLogs.EF: 基于EFCore实现的集成事件日志的提供者, 提供消息的记录

masa framework -- eventbus入门与设计_磊_磊-编程思维

概述 事件总线是一种事件发布/订阅结构,通过发布订阅模式可以解耦不同架构层级,同样它也可以来解决业务之间的耦合,它有以下优点 松耦合 横切关注点 可测试性 事件驱动 发布订阅模式 通过下图我们可以快速了解发布订阅模式的本质 订阅者将自己关心的事件在调度中心进行注册 事件的发布者通过调度中心把事件发布出去 订阅者收到自己关心的事件变更并执行相对应业务 其中发布者无需知道订阅者是谁,订阅

masaframework -- 缓存入门与设计_磊_磊-编程思维

概念 什么是缓存,在项目中,为了提高数据的读取速度,我们会对不经常变更但访问频繁的数据做缓存处理,我们常用的缓存有: 本地缓存 内存缓存:IMemoryCache 分布式缓存 Redis: StackExchange.Redis 功能 目前,MasaFramework为我们提供了以下能力 IDistributedCacheClient: 分布式缓存 Masa.Contrib

masaframework -- 异常处理_磊_磊-编程思维

前言 在程序设计中,我们会遇到各种各样的异常问题,一个异常处理不仅仅可以帮助开发者快速的定位问题,也可以给用户更好的使用体验,那么我们在AspNetCore项目中如何捕获以及处理异常呢? 而对应AspNetCore程序,我们有两种异常处理方案,它们分别是: 异常中间件 异常过滤器 介绍 Masa Franework作为一个框架,它为开发者以及用户提供更好的开发体验和使用体验的异常处理功能

masaframework的minimalapi设计_磊_磊-编程思维

在以前的MVC引用程序中,控制器负责接收输入信息、执行、编排操作并返回响应,它是一个功能齐全的框架,它提供了过滤器、内置了模型绑定与验证,并提供了很多可扩展的管道,但它偏重,不像其它语言是通过更加简洁的方式来开启Web之旅的,因此在.Net6.0官方引入了MinimalAPIs,即最小API,与MVC相比,它足够的简洁,适合小型服务来使用,下面就让我们看看如何使用MinimalAPI来开发一个w

masaframework -- 锁与分布式锁_磊_磊-编程思维

前言 什么是锁?什么是分布式锁?它们之间有什么样的关系? 什么是锁 加锁(lock)是2018年公布的计算机科学技术名词,是指将控制变量置位,控制共享资源不能被其他线程访问。通过加锁,可以确保在同一时刻只有一个线程在访问被锁住的代码片段,我们在单机部署时可使用最简单的加锁完成资源的独享,如: public class Program { private static readonly

配置iconfiguration_磊_磊-编程思维

前言 配置是我们必不可少的功能,我们在开发中,经常会遇到需要获取配置信息的需求,那么如何才能优雅的获取配置信息? 我们希望新的配置: 支持强类型 配置变更后通知 学习难度低 快速入门 根据使用场景我们将配置分为本地配置以及远程配置,下面我们就来看一下本地配置与远程配置是如何来使用的? 安装.Net 6.0 本地配置 新建ASP.NET Core 空项目Assignment.MasaC

依赖注入_磊_磊-编程思维

Masa的依赖注入系统是基于Microsoft的依赖注入扩展库(Microsoft.Extensions.DependencyInjection nuget包)开发的,因此,它的文档在Masa中也是有效的。 按照约定的注册 Masa引入了按照约定进行服务注册,依据约定大于配置,开发者无需做任何事,框架会自动完成注册 依赖接口 ISingletonDependency: 注册生命周期为Singl

对象存储_磊_磊-编程思维

什么是对象存储 在工作中,我们经常需要将文件内容(文件或二进制流)存储在应用程序中,例如你可能要保存商品的封面图片。Masa框架为此提供了对象存储的功能,并对功能抽象,抽象给我们带来的好处: 存储的无关性(不关心存储平台时阿里云OSS还是腾讯云的COS) 更换存储平台成本更低(仅需要更改下存储的提供者,业务侵染低) 支持自定义存储提供者(仅需要自行实现IClient) 对象存储提供程序 阿里云:

数据访问_entityframework集成_磊_磊-编程思维

前言 Masa提供了基于EntityFramework的数据集成,并提供了数据过滤与软删除的功能,下面我们将介绍如何使用它? MasaDbContext入门 安装.Net 6.0 新建ASP.NET Core 空项目Assignment.MasaEntityFramework,并安装Masa.Contrib.Data.EntityFrameworkCore、Swashbuckle.AspNe

对象映射_mapping.mapster_磊_磊-编程思维

前言 在项目中我们会经常遇到对象的映射,比如像Model和Dto之间的映射,或者是对象的深拷贝,这些都是需要我们自己实现的。此时,项目中会出现很多初始化对象的代码,这些代码写起来相当的枯燥乏味,那么有没有什么办法减轻我们的工作量,使得我们可以把时间花费到业务功能上呢? 目前.Net中的对象映射框架,功能强大且性能极佳的对象映射框架已经存在,其中使用最多的有: Mapster AutoMapper

Caller 服务调用 - Dapr-编程思维

前言 上一篇我们讲了使用HttpClient的方式调用,那么如果我们现在需要更换为通过dapr实现服务调用,我们需要做哪些事情呢? Caller.Dapr 入门 如果我们的项目原本使用的是Caller.HttpClient,现在希望改为使用Caller.Dapr,那么我们需要做什么呢? 改造Caller 服务调用 - HttpClient的中的服务端,使得服务端支持dapr调用 调整客户端代码

让服务调用更简单 - Caller.HttpClient-编程思维

前言 绝大多数项目都离不开服务调用,服务的调用方式通常是基于Http、RPC协议的调用,需要获取到对应服务的域名或者ip地址以及详细的控制器方法后才能进行调用,如果项目需要支持分布式部署,则需要借助服务发现或者Nginx才能实现。 但随着Dapr的崛起,服务的调用方式也发生了变化,它不仅仅提供了处理重试和瞬态错误等功能,还内置服务发现,启用dapr的服务仅需知道任意一个启用dapr服务的Http

一行代码让你的项目轻松使用Dapr-编程思维

介绍 Dapr简化了云原生开发,让开发可以把焦点放在应用的业务逻辑上,从而让代码简单、可移植,那作为一个.Net开发者,我们也希望项目可以快速用上dapr,那究竟应该如何做呢? Dapr提出了Sidecar(边车)的概念,在启动项目时再额外启动一个Sidecar, 通过Sidecar可以解决进程间通信,为此官方提供了两种部署方式: 自托管方式下运行Dapr 在 Kubernetes 模式中部署和