Загрузка…
Загрузка…
Go · middle · сложность 5
В Go существует общий и чрезвычайно практичный принцип: принимать интерфейсы, возвращать структуры. Его сила заключается в сохранении гибкости входных зависимостей, а также ясности и функциональности выходных контрактов.
Функция/метод принимает минимальный контракт поведения (например, io.Reader).
а не жестко запрограммированный тип.
Это уменьшает связь между модулями.
Упрощает тестирование: легко заменить заглушку/макет/фейк на необходимые методы.
Вызов получает конкретный тип с полным набором методов.
API становится более прозрачным: пользователь видит реальные возможности object.
Легче развивать тип, не нарушая контракты внешнего интерфейса.
На входе — абстракция, на выходе — конкретность.
Более высокая гибкость интеграции без потери выразительности API.
Улучшение удобства обслуживания: границы модулей четкие, зависимости controlled.
Упрощение рефакторинга. Внутренние изменения легче вносить без каскадирования. edits.
Не создавайте резервные интерфейсы без реальной необходимости.
Интерфейс должен существовать там, где он используется, а не там, где он реализован.
Если нужна только одна реализация и нет никакой пользы от тестирования, это слишком много. абстракция может ухудшить читабельность.
Принятие интерфейсов и возврат конкретных структур — это баланс между расширяемостью и ясностью. Он позволяет писать код на Go, который одновременно удобно тестировать, легко поддерживать и естественно развивать.
В Go существует общий и чрезвычайно практичный принцип: принимать интерфейсы, возвращать структуры.