Проект¶
Будем разработать приложение для публикации текстов. Приложение реализует следующие сценарии(use-cases):
- регистрация пользователя
- вход в систему
- выход из системы
- создание поста
- редактирование поста
- отображение поста
- отображение списка всех постов
Информация:
Проект структурно разбит на подпроекты. Каждый подпроект - clojure проект с собственными зависимостями, управляемыми с помощью tools.deps.
В текущем разделе мы реализуем подпроект core.
Он будет содержать всю бизнес-логику нашего приложения.
Остальные подпроекты будут зависеть от core,
например, web - доставит приложение пользователю с помощью web технологий,
а persistence - реализует работу с базой данных.
Реализуется это с помощью абстракций и инверсии засисимости.
core объявляет абстракцию и примитивную реализацию для отладки и тестирования.
Остальные подпроекты содержат промышленную реализацию этих абстракций.
core должен быть написан максимально качественно, ведь это и есть ваше приложение.
Для остальных подпроектов планку качества можно опустить.
Согласно терминологии Clean Architecture логика приложения разделена между слоями Entities и UseCases.
Для удобства разработки core содержит оба этих слоя.
В зависимости от размера команды, наличия общей предметной области в разных проектах, может быть
будет иметь смысл каждый слой оформить в виде подпроекта.
Термины DDD и Clean Architecture имеют пересечение.
DDD оперирует понятием Entity - единица предметной области,
а в Clean Architecture Entity - основной слой приложения.
Поэтому основной слой приложения будет называться domain
и содержать entities, services, value-objects.
Следующий слой будет называться use-cases.