38 lines
1.6 KiB
Go
38 lines
1.6 KiB
Go
|
|
package main
|
|||
|
|
|
|||
|
|
// fx.Module — модульный монолит с Fx.
|
|||
|
|
//
|
|||
|
|
// Каждый бизнес-домен живёт в своём файле:
|
|||
|
|
// infra.go — БД, кэш, шина событий (общая инфраструктура)
|
|||
|
|
// auth_module.go — авторизация: сессии + проверка токенов
|
|||
|
|
// user_module.go — профили пользователей
|
|||
|
|
// notification_module.go — уведомления
|
|||
|
|
// api.go — HTTP-хендлер и сервер
|
|||
|
|
//
|
|||
|
|
// Зачем это нужно:
|
|||
|
|
// Команда авторизации добавляет TokenValidator → правит ТОЛЬКО auth_module.go.
|
|||
|
|
// main.go не трогает. Конфликтов при мерже с командой уведомлений — ноль.
|
|||
|
|
//
|
|||
|
|
// Без fx.Module все провайдеры в одном main.go. Три команды правят один файл.
|
|||
|
|
// Мерж-конфликты на каждом PR.
|
|||
|
|
//
|
|||
|
|
// Сравните с cmd/fx-di-shared/ — тот же код, но всё в одном файле.
|
|||
|
|
|
|||
|
|
import "go.uber.org/fx"
|
|||
|
|
|
|||
|
|
func main() {
|
|||
|
|
fx.New(
|
|||
|
|
// Общая инфраструктура
|
|||
|
|
InfraModule,
|
|||
|
|
|
|||
|
|
// Бизнес-домены — каждая команда владеет своим файлом.
|
|||
|
|
// Добавить новый домен = новый файл + одна строка здесь.
|
|||
|
|
AuthModule,
|
|||
|
|
UserModule,
|
|||
|
|
NotificationModule,
|
|||
|
|
|
|||
|
|
// API — собирает сервисы в HTTP-хендлер
|
|||
|
|
APIModule,
|
|||
|
|
).Run()
|
|||
|
|
}
|