Size: a a a

2020 August 13

AM

Alexander Makarov in Yii Framework 3
Вроде того
источник

СП

Сергей Предводителев... in Yii Framework 3
Понял, спасибо :)
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Так как отдельно использовать этот класс - можно, но это не правильно?
Вообще нехорошо возвращать более чем интерфейс, но это вопрос философии
источник

DS

Dmitriy S in Yii Framework 3
А, ну  и еще при проксировании интерфейса будут проблемы
источник

СП

Сергей Предводителев... in Yii Framework 3
В общем лучше делать так метод, как он в интерфейсе прописан. Жить будет проще
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
В общем лучше делать так метод, как он в интерфейсе прописан. Жить будет проще
да
источник

СП

Сергей Предводителев... in Yii Framework 3
👍
источник

AP

Arman Poghosyan in Yii Framework 3
Dmitriy S
Вообще нехорошо возвращать более чем интерфейс, но это вопрос философии
Я бы сказал, что это зависит от многого и особенно это библиотека или какой-то свой код. При библиотеке (public API) лучше возвращать абстракцию, чтоб легче было изменять свой код без BC, при своем коде возвращать конкретную реализацию, так как это дает больше возможностей, как бы, ты знаешь реализацию и что там есть (дополнительные методы).
источник

DS

Dmitriy S in Yii Framework 3
Arman Poghosyan
Я бы сказал, что это зависит от многого и особенно это библиотека или какой-то свой код. При библиотеке (public API) лучше возвращать абстракцию, чтоб легче было изменять свой код без BC, при своем коде возвращать конкретную реализацию, так как это дает больше возможностей, как бы, ты знаешь реализацию и что там есть (дополнительные методы).
Как раз абсолютно наоборот, во внутряке фреймворка еще можно вернуть реализацию, а в своем приложении за возврат реализации свыше интерфейса надо бить по рукам.
источник

DS

Dmitriy S in Yii Framework 3
Dmitriy S
Если мы декларируем следование паттерну depenedency injection, то мы должны придерживаться два простых правила:
1. Однин класс - один интерфейс.
2. Все публичные методы класса являются частью интерфейса.
Недавно вот писал об этом
источник

AP

Arman Poghosyan in Yii Framework 3
Я же говорю если Public API - интерфейс, если internal для фреймворка тогда без разницы. Для Public API если возвращать реализацию, то даже маленькая поправка можеть стать BC. Ну в своем коде там уже все зависит от масштабов приложения и реализации. В маленьких проектах коммерчески не выгодно все под реализации делать, время там дороже.
источник

AB

Alexander Borisov in Yii Framework 3
Dmitriy S
Если мы декларируем следование паттерну depenedency injection, то мы должны придерживаться два простых правила:
1. Однин класс - один интерфейс.
2. Все публичные методы класса являются частью интерфейса.
где про это почитать?
источник

AP

Arman Poghosyan in Yii Framework 3
По аргументам почти всегда желательно принимать абтракцию, а не конкретную реализацию
источник

DS

Dmitriy S in Yii Framework 3
Alexander Borisov
где про это почитать?
Нигде, это правило на основе практики которое позволяет избежать довольно частой ошибки, которую совершаю даже опытные разработчики, и если это было пропущено в прод, то это часто создает огромные проблемы при замене реализации, вплоть до перепроектирования архитектуры.
источник

DS

Dmitriy S in Yii Framework 3
Яркий пример - провайдер листенеров, за который мы с @samdark спорили, но все таки пришли к компромису, чтобы не тянуть метод attach, которого нет в интерфейсе.
источник

А

Алексей R in Yii Framework 3
Косяк не в том, что метода нет у интерфейса, а в том, что нет интерфейса под метод
источник

А

Алексей R in Yii Framework 3
Точнее нет интерфейса под ту цель, ради которой нужен этот метод
источник

DS

Dmitriy S in Yii Framework 3
Алексей R
Косяк не в том, что метода нет у интерфейса, а в том, что нет интерфейса под метод
Правильно, хочешь добавить публичный метод - создавай новый интерфейс
источник

А

Алексей R in Yii Framework 3
Dmitriy S
Правильно, хочешь добавить публичный метод - создавай новый интерфейс
Это figовая тема
источник

DS

Dmitriy S in Yii Framework 3
Но в случае PSR интерфейсов это бессмысленно, поэтому реализации этих интерфейсов должны полностью соответсовть интерфейсам по публичным методам.
источник