开源的 CQRS 和 DDD 风格的 .NET 框架 | 您所在的位置:网站首页 › domain和dominate › 开源的 CQRS 和 DDD 风格的 .NET 框架 |
Revo 框架 Revo 是一个开源框架,适用于使用 Event Sourcing 、CQRS 和 DDD 构建的现代化 .NET 应用程序。 功能特性 • Domain-Driven Design • Event Sourcing • CQRS • SOA • Sagas • 授权 • 多租户 • 数据访问 • 数据库迁移 • 审计 架构图 ![]() 使用示例 那么使用 Revo 编写程序的是什么样的呢? 下面是一个非常简单的 todo 示例。 Event 任务更新时的事件 public class TodoRenamedEvent : DomainAggregateEvent { public TodoRenamedEvent(string name) { Name = name; } public string Name { get; } }Aggregate public class Todo : EventSourcedAggregateRoot { public Todo(Guid id, string name) : base(id) { Rename(name); } protectedTodo(Guid id) : base(id) { } public string Name { get; private set; } public void Rename(string name) { if (!Name != name) { Publish(new TodoRenamedEvent(name)); } } private void Apply(TodoRenamedEvent ev) { Name = ev.Name; } }Command public class CreateTodoCommand : ICommand { public CreateTodoCommand(string name) { Name = name; } [Required] public string Name { get; } }CommandHandler public class TodoCommandHandler : ICommandHandler { private readonly IRepository repository; public TodoCommandHandler(IRepository repository) { this.repository = repository; } public Task HandleAsync(CreateTodoCommand command, CancellationToken cancellationToken) { var todo = new Todo(command.Id); todo.Rename(command.Name); repository.Add(todoList); return Task.CompletedTask; } }Query public class GetTodosQuery : IQuery { }Query Handler public class TaskQueryHandler : IQueryHandler { private readonly IReadRepository readRepository; public TaskListQueryHandler(IReadRepository readRepository) { this.readRepository = readRepository; } public Task HandleAsync(GetTodoListsQuery query, CancellationToken cancellationToken) { return Task.FromResult(readRepository .FindAll()); } }ASP.NET Core controller [Route("todos")] public class TodoController : CommandApiController { [HttpGet("")] public Task Get() { return CommandBus.SendAsync(new GetTodosQuery()); } [HttpPost("")] public Task Post([FromBody] CreateTodoDto payload) { return CommandBus.SendAsync(new CreateTodoCommand(payload.Name)); } public class CreateTodoDto { public string Name { get; set; } } }社区非常棒的并且成熟的 DDD 框架,感兴趣的同学可以学习一下。 往期推荐: 全栈开发框架 Blazor Spark 现已推出! 基于 .NET 6 开发的 Excel 转 JSON 神器 ETL .NET 来了!.NET 开发人员终于可以轻松处理大数据 基于 WPF 的开源 OCR 文字识别抓取神器! .NET 轻量级工作流引擎 项目地址 https://github.com/revoframework/Revo 分享 点收藏 点点赞 点在看 |
CopyRight 2018-2019 实验室设备网 版权所有 |