Будем разработать приложение для публикации текстов. Приложение реализует следующие сценарии(usecases):
- регистрация пользователя
- вход в систему
- выход из системы
- создание поста
- редактирование поста
- отображение поста
- отображение списка всех постов
Информация:
Проект структурно разбит на подпроекты. Каждый подпроект - 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
.
Исходники подпроекта: https://github.com/darkleaf/publicator/tree/master/core