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()
|
||
}
|