event_hex 0.0.3

A pragmatic Rust toolkit for Domain-Driven Design with first-class support for event sourcing and CQRS.
Documentation
# event_hex

<div align="center">
    <a href="https://github.com/develnk/event_hex"><img
        alt="github"
        src="https://img.shields.io/badge/github-develnk/event_hex-228b22?style=for-the-badge&labelColor=555555&logo=github"
        height="25"
    /></a>
    <a href="https://crates.io/crates/event_hex"><img
        alt="crates.io"
        src="https://img.shields.io/crates/v/event_hex.svg?style=for-the-badge&color=e37602&logo=rust"
        height="25"
    /></a>
    <a href="https://docs.rs/event_hex/latest/event_hex/"><img
        alt="docs.rs"
        src="https://img.shields.io/badge/docs.rs-event_hex-3b74d1?style=for-the-badge&labelColor=555555&logo=docs.rs"
        height="25"
    /></a>
    <a href="https://docs.rs/event_hex/latest/event_hex/"><img
        alt="license"
        src="https://img.shields.io/badge/License-MIT%20OR%20Apache--2.0-blue.svg?style=for-the-badge"
        height="25"
    /></a>
</div>

> Английская верси: [README.md]README.md

Набор инструментов на Rust для проектов спроектированных на гексагональной архитектуре
с первоклассной поддержкой **DDD(Domain-Driven Design)**, **Event Sourcing** и **CQRS**

## Почему event_hex

- **Hexagonal-friendly.** Все абстракции реализованы с учётом разделения на слои гексагональной архитектуры.
  Все примеры построены на гексагональной архитектуре с подробным объяснением за что конкретно должен отвечать
  определённый слой архитектуры.
- **Event Sourcing.** Агрегаты генерируют доменные события, EventStore сохраняет их, DomainEventHandler
  позволяет применить асинхронно любую необходимую логику в качестве реакции на выпущенное событие.
- **Event Store.** Хранилище событий это центральное место для хранения событий - **это источник истины**.
  События нельзя удалять либо модифицировать, и библиотека это учитывает.
    - Хранилище событий поддерживает возможность хранить **хеш предыдущего события**, таким образом
      получается цепочка связанных событий. При восстановлении состояния агрегата проверяются эти хеши. Таким образом
      невозможно изменить событие не заметно для системы.
    - Поддерживаются снапшоты агрегата, чтобы не прокручивать все события с самого начала.
    - Встроенная поддержка Concurrency Conflict. Невозможно сохранить два события с одинаковой версией.
    - Поддерживается `MongoDb` и `PostgreSQL`, а также имеется возможность написать свою версию хранилища.
- **CQRS по умолчанию.** CQRS отлично вписывается в гексагональную архитектуру. Для обработки команд реализована
  in-memory шина `CommandBus`, для обработки запросов релизована шина `QueryBus`, с возможностью зарегистрировать
  обработчики.
- **Async.** Основана на async-рантайме **Tokio**

Высокоуровневая архитектура:

```mermaid

```

## Лицензия

Лицензировано на условиях одной из лицензий на ваш выбор:

- Apache License, Version 2.0 ([LICENSE-APACHE]LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>)
- MIT license ([LICENSE-MIT]LICENSE-MIT or <http://opensource.org/licenses/MIT>)