Какие плюсы и минусы зависимости бизнес-логики от интерфейса

«Какие плюсы и минусы зависимости бизнес-логики от интерфейса» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Плюсы:

  • Гибкость: легко подменять реализации без изменения кода бизнес-логики.
  • Тестируемость: можно использовать моки/стабы для изолированного тестирования.
  • Слабая связанность: уменьшает зависимость от конкретных реализаций.

Минусы:

  • Сложность: избыток интерфейсов может усложнить архитектуру.
  • Нагрузка на рантайм: в Go интерфейсы разрешаются динамически (незначительный оверхед).
  • Риск "интерфейсного взрыва": создание интерфейсов "на всякий случай" без реальной необходимости.

Пример:

type Storage interface {
    Save(data string) error
}

type DBStorage struct{} 
func (d *DBStorage) Save(data string) error { /*...*/ }

type BusinessLogic struct {
    storage Storage
}

func (b *BusinessLogic) Process(data string) error {
    return b.storage.Save(data)
}

Здесь BusinessLogic зависит только от интерфейса, что позволяет подменить DBStorage на другую реализацию (например, для тестов).