Проект реализует небольшую систему оплаты заказов с использованием слоистой архитектуры и DDD-lite принципов.
Демонстрируется разделение ответственности, доменное моделирование и управление бизнес-кейсами без подключения к реальной базе данных.
Проект разделён на четыре слоя:
- domain (Домен) — бизнес-логика, сущности, value-объекты и инварианты
- application (Приложение) — координирует работу use-case и выполняет бизнес-операции
- infrastructure (Инфраструктура) — технические реализации интерфейсов (репозитории, платежный шлюз)
- tests (Тесты) — проверка работы use-case и соблюдения правил домена без базы данных
- order (Заказ) — корень агрегата
- order_line (Строка заказа) — часть агрегата
- money (Деньги) — value-объект для суммы и валюты
- order_status (Статус заказа) — перечисление возможных состояний
Все бизнес-правила (например, запрет оплаты пустого заказа и запрет изменения после оплаты) реализованы на уровне домена.
pay_order_use_case выполняет следующие шаги:
- Получает заказ из репозитория
- Выполняет оплату на уровне домена
- Вызывает платежный шлюз
- Сохраняет обновлённый заказ
- Возвращает результат оплаты
- in_memory_order_repository — хранение заказов в памяти для тестирования
- fake_payment_gateway — имитация процесса оплаты без реальных транзакций
- Все тесты выполняются без базы данных
- Проверяют успешную оплату, запрет оплаты пустого или уже оплаченного заказа, запрет изменения после оплаты и корректность подсчёта итоговой суммы