atomic-unused-appenv-parameter.md 1.4 KB

Антипаттерн: Передача неиспользуемого параметра в конструктор

Контекст: Пять хендлеров в проекте принимали appEnv string в конструкторе, но никогда его не использовали.

Суть

func NewPlaceHandler(placeSvc *services.PlaceService, appEnv string) *PlaceHandler {
    return &PlaceHandler{placeSvc: placeSvc}  // appEnv игнорируется
}

Проблемы:

  • Вводит в заблуждение — следующий разработчик подумает, что appEnv важен
  • Мёртвый код
  • Нарушает YAGNI

Решение: Убрать параметр.

func NewPlaceHandler(placeSvc *services.PlaceService) *PlaceHandler {
    return &PlaceHandler{placeSvc: placeSvc}
}

Когда нужен appEnv:

  • AuthHandler — для управления SameSite и Secure флагами кук (легитимно)
  • errors.go — для скрытия деталей ошибок в production (легитимно через глобальную переменную AppEnv)
  • Для всех остальных — либо через глобальный AppEnv, либо не нужен

Связанные заметки

  • [[architecture-overview]]
  • [[MOC-backend-patterns]]

#golang #antipattern #yagni #code-review