Reo.Core.BaseDomainModels.MediatR
8.0.397
dotnet add package Reo.Core.BaseDomainModels.MediatR --version 8.0.397
NuGet\Install-Package Reo.Core.BaseDomainModels.MediatR -Version 8.0.397
<PackageReference Include="Reo.Core.BaseDomainModels.MediatR" Version="8.0.397" />
<PackageVersion Include="Reo.Core.BaseDomainModels.MediatR" Version="8.0.397" />
<PackageReference Include="Reo.Core.BaseDomainModels.MediatR" />
paket add Reo.Core.BaseDomainModels.MediatR --version 8.0.397
#r "nuget: Reo.Core.BaseDomainModels.MediatR, 8.0.397"
#addin nuget:?package=Reo.Core.BaseDomainModels.MediatR&version=8.0.397
#tool nuget:?package=Reo.Core.BaseDomainModels.MediatR&version=8.0.397
Reo.Core.BaseDomainModels.MediatR
Описание пакета
Пакет Reo.Core.BaseDomainModels.MediatR предоставляет набор базовых классов и интерфейсов для построения приложений на основе Domain-Driven Design (DDD) с интеграцией MediatR. Он решает задачи структурирования бизнес-логики, управления доменными событиями и командами, а также обеспечивает удобный способ взаимодействия с репозиториями.
Основные функции:
- Поддержка доменных моделей (агрегатов) с идентификаторами.
- Интеграция с MediatR для обработки команд и событий.
- Абстракции для репозиториев (чтение и запись данных).
- Упрощение реализации паттернов CQRS и Event Sourcing.
Основные компоненты
1. IReoAggregateRoot<TId>
Интерфейс для агрегатов доменной модели. Определяет обязательные свойства и методы, такие как Id
и методы для
обработки команд и событий.
2. IReoDomainCommand / IReoDomainCommandWithResult
Интерфейсы для команд, которые могут быть обработаны через MediatR. IReoDomainCommand
используется для команд без
возвращаемого значения, а IReoDomainCommandWithResult
— для команд, возвращающих bool
.
3. IReoDomainEvent
Интерфейс для доменных событий, реализующих INotification
из MediatR. Используется для публикации событий после
изменения состояния агрегата.
4. IReoDomainCommandsExecutor / IReoDomainEventsExecutor
Интерфейсы для исполнения команд и событий. Реализуются в базовых классах, таких как ReoAggregateRoot
, и обеспечивают
интеграцию с MediatR.
5. IReoDomainReadOnlyRepository<TAggregateRoot> / IReoDomainWriteOnlyRepository<TAggregateRoot>
Абстракции для репозиториев. Предоставляют методы для чтения и записи агрегатов в хранилище данных.
6. ReoAggregateRoot<TId>
Базовый класс для реализации агрегатов. Реализует IReoAggregateRoot<TId>
, IReoDomainCommandsExecutor
,
IReoDomainEventsExecutor
и предоставляет методы для добавления команд и событий.
Требования
- .NET: 8.0 и выше.
- Зависимости:
Установка
NuGet Package Manager
Install-Package Reo.Core.BaseDomainModels.MediatR
.NET CLI
dotnet add package Reo.Core.BaseDomainModels.MediatR
Настройка
Регистрация в DI-контейнере (ASP.NET Core)
Добавьте сервисы в ConfigureServices
в Startup.cs
или Program.cs
:
services.AddMediatR(cfg => {
cfg.RegisterServicesFromAssembly(typeof(Startup).Assembly);
});
Пример регистрации репозиториев
services.AddScoped<IReoDomainReadOnlyRepository<MyAggregateRoot>, MyRepository>();
services.AddScoped<IReoDomainWriteOnlyRepository<MyAggregateRoot>, MyRepository>();
Использование
Пример 1: Создание агрегата и обработка команды
public class CreateOrderCommand : IReoDomainCommand
{
public Guid CustomerId { get; set; }
public List<OrderItem> Items { get; set; }
}
public class OrderAggregate : ReoAggregateRoot<Guid>
{
public Guid CustomerId { get; private set; }
public List<OrderItem> Items { get; private set; }
public void Apply(CreateOrderCommand command)
{
CustomerId = command.CustomerId;
Items = command.Items;
AddDomainEvent(new OrderCreatedEvent { OrderId = Id });
}
}
public class OrderCreatedEvent : IReoDomainEvent
{
public Guid OrderId { get; set; }
}
Пример 2: Обработчик команды
public class CreateOrderCommandHandler : IRequestHandler<CreateOrderCommand>
{
private readonly IReoDomainWriteOnlyRepository<OrderAggregate> _repository;
public CreateOrderCommandHandler(IReoDomainWriteOnlyRepository<OrderAggregate> repository)
{
_repository = repository;
}
public async Task Handle(CreateOrderCommand command, CancellationToken token)
{
var aggregate = new OrderAggregate();
aggregate.Apply(command);
await _repository.SaveAsync(aggregate, token);
}
}
Пример 3: Обработчик события
public class OrderCreatedEventHandler : INotificationHandler<OrderCreatedEvent>
{
public async Task Handle(OrderCreatedEvent notification, CancellationToken token)
{
// Логика обработки события (например, отправка уведомления).
Console.WriteLine($"Order created: {notification.OrderId}");
}
}
Лицензия
Этот пакет распространяется под лицензией MIT License.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- AutoMapper (>= 11.0.1)
- FluentValidation (>= 11.11.0)
- FluentValidation.AspNetCore (>= 11.3.1)
- Flurl (>= 4.0.0)
- Flurl.Http (>= 4.0.2)
- JetBrains.Annotations (>= 2024.3.0)
- MediatR (>= 12.5.0)
- Microsoft.AspNetCore.Mvc.NewtonsoftJson (>= 8.0.17)
- Microsoft.Bcl.AsyncInterfaces (>= 9.0.6)
- Microsoft.CSharp (>= 4.7.0)
- Microsoft.Extensions.Configuration (>= 9.0.6)
- Microsoft.Extensions.Configuration.Abstractions (>= 9.0.6)
- Microsoft.Extensions.Configuration.Binder (>= 9.0.6)
- Microsoft.Extensions.DependencyInjection (>= 9.0.6)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.6)
- Microsoft.Extensions.Http.Polly (>= 9.0.6)
- Microsoft.Extensions.Logging (>= 9.0.6)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.6)
- Microsoft.Extensions.Options (>= 9.0.6)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 9.0.6)
- NEST (>= 7.17.5)
- Newtonsoft.Json (>= 13.0.3)
- Polly (>= 8.5.0)
- RedLock.net (>= 2.3.2)
- Reo.Core.BaseDomainModels (>= 8.0.397)
- System.Collections.Immutable (>= 9.0.6)
- System.ComponentModel.Annotations (>= 5.0.0)
- System.Configuration.ConfigurationManager (>= 9.0.6)
- System.IO.Abstractions (>= 22.0.14)
- System.IO.Pipelines (>= 9.0.6)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Reo.Core.BaseDomainModels.MediatR:
Package | Downloads |
---|---|
Reo.Core.Application.Abstractions.MediatR
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.