Back to questions
2gis
Senior
2
Есть ли плюсы у подхода с вынесением интерфейсов в отдельный пакет?
Companies where asked
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) // проверка соответствия интерфейсу