DT.Kernel
2.2.0
dotnet add package DT.Kernel --version 2.2.0
NuGet\Install-Package DT.Kernel -Version 2.2.0
<PackageReference Include="DT.Kernel" Version="2.2.0" />
<PackageVersion Include="DT.Kernel" Version="2.2.0" />
<PackageReference Include="DT.Kernel" />
paket add DT.Kernel --version 2.2.0
#r "nuget: DT.Kernel, 2.2.0"
#:package DT.Kernel@2.2.0
#addin nuget:?package=DT.Kernel&version=2.2.0
#tool nuget:?package=DT.Kernel&version=2.2.0
DT.Kernel - Shared Kernel для DDD
Описание
Этот проект представляет собой общее ядро (Shared Kernel) для реализации Domain-Driven Design (DDD) в приложениях. Он содержит базовые абстракции и реализации для сущностей, агрегатов, value objects, доменных событий и исключений.
Основные компоненты
Базовые абстракции
- Entity<TKey> - базовая сущность с идентификатором
- AggregateRoot<TKey> - корень агрегата с поддержкой доменных событий
- ValueObject - базовый value object с реализацией сравнения
- IAggregateRoot - интерфейс корня агрегата
Доменные события
- IDomainEvent - интерфейс доменного события
- Поддержка коллекции событий в агрегатах
Исключения доменного уровня
- DomainException - базовое доменное исключение
- DomainRequiredFieldException - обязательное поле не заполнено
- DomainMinLengthFieldException - минимальная длина не соблюдена
- DomainMaxLengthFieldException - максимальная длина превышена
- DomainRangeFieldException - значение вне допустимого диапазона
- DomainValidationFieldException - невалидное поле
- DomainResourceNotFoundException - ресурс не найден
- DomainResourceAlreadyExistsException - ресурс уже существует
Коды для локализации
- DomainExceptionCodes - коды доменных исключений
- DomainFieldCodes - коды доменных полей
Репозитории (интерфейсы)
- IAddItem<TAggregate> - добавление сущностей
- IAddItemAsync<TAggregate> - добавление сущностей асинхронно
- IAddRangeItems<TAggregate> - добавление списка сущностей
- IAddRangeItemsAsync<TAggregate> - добавлене списка сущностей асинхронно
- IGetItem<TAggregate, TKey> - получение сущностей
- IGetItemAsync<TAggregate, TKey> - получение сущностей асинхронно
- IUpdateItem<TAggregate> - обновление
- IUpdateItemAsync<TAggregate> - обновление сущностей асинхронно
- IDeleteItem<TAggregate> - удаление сущностей
- IDeleteItemAsync<TAggregate> - удаление сущностей асинхронно
- IDeleteRangeItems<TAggregate> - удаление списка сущностей
- IDeleteRangeItemsAsync<TAggregate> - удаление списка сущностей асинхронно
- IUnitOfWork - Unit of Work паттерн
Использование
Создание сущности
public class User : Entity<Guid>
{
public string Name { get; private set; }
public Email Email { get; private set; }
public User(Guid id, string name, Email email) : base(id)
{
Name = name;
Email = email;
}
}
Создание агрегата
public class Order : AggregateRoot<Guid>
{
private readonly List<OrderItem> _items = new();
public IReadOnlyCollection<OrderItem> Items => _items.AsReadOnly();
public decimal TotalAmount { get; private set; }
public Order(Guid id) : base(id) { }
public void AddItem(Product product, int quantity)
{
var item = new OrderItem(product.Id, product.Price, quantity);
_items.Add(item);
TotalAmount += item.TotalPrice;
AddDomainEvent(new OrderItemAddedEvent(Id, product.Id, quantity));
}
}
Создание Value Object
public class Email : ValueObject
{
public string Value { get; }
public Email(string value)
{
Value = SetCharField("email.field", value, 5, 255);
if (!IsValidEmail(value))
throw new DomainValidationFieldException("email.field", "valid email format");
}
protected override IEnumerable<object> GetEqualityComponents()
{
yield return Value;
}
private static bool IsValidEmail(string email)
{
// валидация email
return true;
}
}
Обработка исключений
try
{
var user = new User(Guid.NewGuid(), "", new Email("invalid-email"));
}
catch (DomainRequiredFieldException ex)
{
// Обработка обязательного поля
Console.WriteLine($"Field {ex.FieldName} is required");
}
catch (DomainValidationFieldException ex)
{
// Обработка невалидного поля
Console.WriteLine($"Field {ex.FieldName} must have {ex.MustHave}");
}
Особенности
Типобезопасность - строгая типизация для идентификаторов и агрегатов
Иммутабельность - защита внутреннего состояния сущностей
Доменные события - встроенная поддержка событийной модели
Локализация - коды ошибок для поддержки многоязычности
Валидация - встроенные методы валидации в ValueObject
Async поддержка - асинхронные операции в репозиториях
Добавьте проект как зависимость в ваш solution или установите как NuGet пакет (если опубликован).
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. 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. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Add specifications