开源的 CQRS 和 DDD 风格的 .NET 框架 您所在的位置:网站首页 domain和dominate 开源的 CQRS 和 DDD 风格的 .NET 框架

开源的 CQRS 和 DDD 风格的 .NET 框架

#开源的 CQRS 和 DDD 风格的 .NET 框架| 来源: 网络整理| 查看: 265

Revo 框架

Revo 是一个开源框架,适用于使用 Event Sourcing 、CQRS 和 DDD 构建的现代化 .NET 应用程序。

功能特性

• Domain-Driven Design

• Event Sourcing

• CQRS

• SOA

• Sagas

• 授权

• 多租户

• 数据访问

• 数据库迁移

• 审计

架构图

774c476b0e2f66c3297ae614ab8877fe.png

使用示例

那么使用 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

4889348c2c0b1b1d2e8e6e9d8e3248c2.png

分享

0fd658423f864d0cedbf796fa28123ca.png

点收藏 

68cd62b0faf6935df968578d4b5536a6.png

点点赞

6592a33206f433416ae0a53b5f67a9c0.png

点在看



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有