описание экспортируемого апи) или там, где используете (как текущую зависимость) ? Если второй вариант, то как выходите из ситуации, когда одинаковый интерфейс нужен в двух местах - выносите в общий скоп или два раза объявляете его локально?
Везде. Интерфейсов мало не бывает.
Зависит от задачи.
два раза локально это помогает untight counpling, что всегда хорошо
А в какой задаче первый вариант подойдет лучше?
В пакете рядом с имплементацией? Очень просто, когда вы разрабатываете библиотеку/фреймворк и хотите предоставить потребителям библиотеки возможность ее расширения (изменения поведения какой то ее части). По сути это механизм обеспечивающий инверсию управления.
Разве это не нарушает принцип разделения интерфейсов? У нас получается один большой и толстый интерфейс, все методы которого клиенту и не понадобятся. Почему бы ему свой интерфейс не описать с нужными ему методами?
Я вот это упустил: (как описание экспортируемого апи) . Этого делать не надо нет. :)
это как ра рядом с использованием же
Ну по сути да. Просто смотря с какой точки зрения смотреть. Вопрос же стоял: Где объявлять? В пакете где его имплементируете или в пакете где его используете? It depends. Если пишем фреймворк то можем и в пакете в котором имплементируем (Дефолтные реализации или реализации которые поддерживаются из коробки). Если просто развязываем с помощью интерфейсов зависимости, то конечно там где интерфейс используется.
Обсуждают сегодня