DT.Kernel
2.0.0
See the version list below for details.
dotnet add package DT.Kernel --version 2.0.0
NuGet\Install-Package DT.Kernel -Version 2.0.0
<PackageReference Include="DT.Kernel" Version="2.0.0" />
<PackageVersion Include="DT.Kernel" Version="2.0.0" />
<PackageReference Include="DT.Kernel" />
paket add DT.Kernel --version 2.0.0
#r "nuget: DT.Kernel, 2.0.0"
#:package DT.Kernel@2.0.0
#addin nuget:?package=DT.Kernel&version=2.0.0
#tool nuget:?package=DT.Kernel&version=2.0.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> - добавление сущностей асинхронно
- IGetItem<TAggregate, TKey> - получение сущностей
- **IGetItemAsync<TAggregate, TKey> - получение сущностей асинхронно
- IUpdateItem<TAggregate> - обновление
- IUpdateItemAsync<TAggregate> - обновление сущностей асинхронно
- IDeleteItem<TAggregate> - удаление сущностей
- IDeleteItemAsync<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.
Change repositories interfaces. Split to sync and async methods.