💬 Что из себя представляет Interface Pollution в Go и как его определить?
Рассмотрим пример, который демонстрирует Interface Pollution, неправильно используя интерфейс, когда он не нужен.
Интерфейс
📌 Некоторые способы определения Interface Pollution:
🔹 Пакет объявляет интерфейс, который соответствует полному API своего собственного конкретного типа.
🔹 Интерфейсы экспортируются, но конкретные типы, реализующие интерфейс, не экспортируются.
🔹 Функция фабрика для конкретного типа возвращает значение интерфейса с неэкспортируемым конкретным типом внутри.
🔹 Интерфейс можно удалить, и для пользователя API ничего не изменится.
🔹 Интерфейс не обеспечивает гибкость или адаптивность API к изменениям в будущем.
Рассмотрим пример, который демонстрирует Interface Pollution, неправильно используя интерфейс, когда он не нужен.
type Server interface {
Start() error
Stop() error
Wait() error
}
Интерфейс
Server
определяет контракт для TCP-серверов. Проблема в том, что нам не нужен контракт, нам нужна реализация. К тому же этот интерфейс основан на существительном, а не на глаголе. Конкретные типы — это существительные, так как они представляют конкретную проблему. Интерфейсы описывают поведение, и Server
— это не поведение.📌 Некоторые способы определения Interface Pollution:
🔹 Пакет объявляет интерфейс, который соответствует полному API своего собственного конкретного типа.
🔹 Интерфейсы экспортируются, но конкретные типы, реализующие интерфейс, не экспортируются.
🔹 Функция фабрика для конкретного типа возвращает значение интерфейса с неэкспортируемым конкретным типом внутри.
🔹 Интерфейс можно удалить, и для пользователя API ничего не изменится.
🔹 Интерфейс не обеспечивает гибкость или адаптивность API к изменениям в будущем.