Sobes.tech
Back to questions
Senior
2

Есть ли плюсы у подхода с вынесением интерфейсов в отдельный пакет?

Companies where asked
2gis2gis

Answer from AI

sobes.tech AI

Вынесение интерфейсов в отдельный пакет в Go имеет несколько преимуществ:

  • Чистая архитектура и разделение ответственности. Интерфейсы, определяющие контракты, отделены от конкретных реализаций, что облегчает понимание и поддержку кода.
  • Упрощение тестирования. Благодаря отдельным интерфейсам можно легко подменять реализации моками или стабами.
  • Снижение зависимостей. Пакеты, использующие интерфейсы, зависят только от контрактов, а не от конкретных реализаций, что уменьшает связанность.
  • Повышение переиспользуемости. Интерфейсы в отдельном пакете могут использоваться разными модулями без дублирования.

Однако стоит избегать чрезмерного дробления пакетов, чтобы не усложнять структуру проекта.

Пример:

// В пакете interfaces
package interfaces

type Storage interface {
    Save(data []byte) error
    Load(id string) ([]byte, error)
}

// В пакете storage
package storage

import "project/interfaces"

type FileStorage struct {}

func (fs *FileStorage) Save(data []byte) error { /* реализация */ return nil }
func (fs *FileStorage) Load(id string) ([]byte, error) { /* реализация */ return nil, nil }

var _ interfaces.Storage = (*FileStorage)(nil) // проверка соответствия интерфейсу