💬 Что из себя представляет Interface Pollution в Go и как его определить?



Рассмотрим пример, который демонстрирует Interface Pollution, неправильно используя интерфейс, когда он не нужен.



type Server interface {

Start() error

Stop() error

Wait() error

}




Интерфейс Server определяет контракт для TCP-серверов. Проблема в том, что нам не нужен контракт, нам нужна реализация. К тому же этот интерфейс основан на существительном, а не на глаголе. Конкретные типы — это существительные, так как они представляют конкретную проблему. Интерфейсы описывают поведение, и Server — это не поведение.



📌 Некоторые способы определения Interface Pollution:



🔹 Пакет объявляет интерфейс, который соответствует полному API своего собственного конкретного типа.

🔹 Интерфейсы экспортируются, но конкретные типы, реализующие интерфейс, не экспортируются.

🔹 Функция фабрика для конкретного типа возвращает значение интерфейса с неэкспортируемым конкретным типом внутри.

🔹 Интерфейс можно удалить, и для пользователя API ничего не изменится.

🔹 Интерфейс не обеспечивает гибкость или адаптивность API к изменениям в будущем.