Шаблон для создания приложений в соответствии с принципами чистой архитектуры.
Ключевые моменты:
- Соответствие принципам чистой архитектуры
- Используются паттерны DDD
- Учтены лучшие практики написания кода на Go
Это шаблон, а не пример реального приложения. Задача шаблона быть максимально общим и показывать подходы, а не реализовывать конкретную бизнес-логику, которая будет отличаться для каждого реального приложения.
> tree -d
.
├── cmd
│ └── service
└── internal
├── app
│ ├── adapters
│ │ ├── primary
│ │ │ ├── grpc-adapter
│ │ │ │ ├── generated
│ │ │ │ └── handlers
│ │ │ ├── http-adapter
│ │ │ │ ├── handlers
│ │ │ │ └── router
│ │ │ ├── kafka-adapter-subscriber
│ │ │ │ ├── kafka-handlers
│ │ │ │ └── kafka-queue
│ │ │ ├── nats-adapter-subscriber
│ │ │ │ └── nats-handlers
│ │ │ ├── os-signal-adapter
│ │ │ └── pprof-adapter
│ │ └── secondary
│ │ ├── gateways
│ │ │ └── entity5-gateway
│ │ ├── grpc-adapter
│ │ │ └── generated
│ │ ├── kafka-adapter-publisher
│ │ ├── kafka-adapter-publisher2
│ │ │ └── kafka-client
│ │ ├── nats-adapter-publisher
│ │ └── repositories
│ │ ├── entity1-repository
│ │ ├── entity2-repository
│ │ ├── entity3-repository
│ │ └── entity4-repository
│ ├── application
│ │ └── usecases
│ ├── config
│ └── domain
│ ├── entity1
│ ├── entity2
│ ├── entity3
│ ├── entity4
│ └── entity5
└── pkg
├── clickhouse
├── helpers
├── http-server
├── middleware-helpers
├── mongo
├── postgres
└── provider-helpers
- Экземпляры БД теперь создаются вне репозиториев и передаются в них как аргументы (для pg)
- Заменён
sqlxнаpgxpool - Заменён
kafka-goнаfranz-go - Заменён
go-clickhouseнаclickhouse-go - Сущность
Bookзаменена на несколько сущностей с более обобщёнными именами —Entity* controllersпереименованы вhandlers(так как "controllers" — термин из MVC)providerпереименован вgateway(используется для HTTP-запросов к другим микросервисам)libsпереименованы вpkg(pkg— более распространённое название)- Обновлена конфигурация линтеров (1.64.8)
gracefulтеперь оформлен как библиотека- Различные исправления и улучшения
- Добавлен первоначальный логотип
- Добавлена библиотека
gracefulдля корректного завершения работы http-adapterготов- Рефакторинг
main: разделена инициализация и выполнение - Конфиги теперь являются частью соответствующих пакетов
- Унифицированы имена пакетов (все в
snake_case) - Общий рефакторинг: переименование пакетов, переменных, функций и т.д.
- Начальная версия
- Удалить
configиз domain - Пересмотреть структуру
http-adapter - Реализовать корректное завершение
- Подумать над веткой с внедрением зависимостей (DI)
- Разделить слой адаптеров и слой инфраструктуры
- Подумать о
fatalв конструкторах адаптеров - Проверить, как передаётся
contextв адаптерах - Подумать о замене (или добавлении)
Config.tomlнаyamlилиhcl - Добавить менеджер транзакций?
- Удалить
books - Проверить адаптеры
- Логотип
- Перенести
infraвpkg - Привести проект к компилируемому состоянию
- Opinionated: в названиях пакетов используется
snake_case - Opinionated: структура и конструктор находятся в
init.go, а методы — вmethods.go