ECommerce Microservices:基于DDD+CQRS的实用电子商务.NET源码


ECommerce Microservices是一个虚构的电子商务,基于不同的软件架构和技术,如微服务架构、垂直切片架构、CQRS 模式、领域驱动设计、事件驱动架构、收件箱和发件箱模式,并使用 Postgres 写入端和 MongoDb 读取端等。
该项目正在进行中,随着时间的推移将添加新功能。
 
项目的目标

  • 带有领域驱动设计(DDD)实现的微服务架构。
  • 为每个微服务正确地分离有界上下文。
  • 通过使用RabbitMQ和一些自治服务的异步消息代理,在受约束的上下文之间进行通信。
  • 简单的CQRS实现和事件驱动架构,写端使用Postgres,读端使用MongoDB和Elastic Search。为了同步读端和写端,我将使用EventStore
  • Projections投射或Marten Projections。我们也可以通过在服务之间传递一些集成事件来同步我们的读和写模型,以实现最终一致性。
  • 实施各种类型的测试,如单元测试、集成测试和端到端测试。
  • 使用收件箱模式来保证接收方微服务的消息空闲性和精确一次的交付模式,使用收件箱模式来确保任何消息的丢失和至少一次的交付规则。
  • 使用最佳实践和新技术以及设计模式。
  • 使用事件风暴来提取数据模型和有边界的环境(使用Miro)。
  • 使用Docker-Compose、Helm和Kubernetes作为我们的部署机制,同时使用Terraform作为基础设施的代码。
  • 使用Istio和Service Mesh实现我们的微服务。

涉及技术库:

  • .NET 6 - .NET框架和.NET核心,包括ASP.NET和ASP.NET核心
  •  Npgsql Entity Framework Core Provider - Npgsql有一个Entity Framework (EF) Core Provider。它的行为与其他EF Core提供者(如SQL Server)类似,所以一般的EF Core文档也适用于此。
  •  FluentValidation - 流行的.NET验证库,用于构建强类型的验证规则。
  •  Swagger & Swagger UI - 用于记录建立在ASP.NET Core上的API的Swagger工具。
  •  Serilog - 具有完全结构化事件的简单.NET日志。
  • Polly - Polly是一个.NET弹性和瞬时故障处理库,允许开发人员以流畅和线程安全的方式表达策略,如重试、断路、超时、隔板隔离和回退。
  •  Scrutor - Microsoft.Extensions.DependencyInjection的汇编扫描和装饰扩展。
  •  Opentelemetry-dotnet - OpenTelemetry .NET客户端
  •  DuendeSoftware IdentityServer - 用于ASP.NET Core的最灵活、最符合标准的OpenID Connect和OAuth 2.x框架。
  •  Hangfire - 在ASP.NET应用程序中执行即用即忘、延迟和重复性任务的简便方法。
  •  EasyCaching - 开源缓存库,包含缓存的基本用法和一些高级用法,可以帮助我们更容易地处理缓存。
  •  AutoMapper - .NET中基于约定的对象-对象映射器。
  •  Hellang.Middleware.ProblemDetails - 用于处理.Net Core中异常的中间件。
  •  IdGen - Twitter Snowflake-alike ID generator for .Net。