Size: a a a

2020 June 29

DS

Dmitriy S in Yii Framework 3
Dmitriy S
Мы можем сделать его protected и отнаследовать композитній контейнер от абстрактного конфигуратора, но в таком случае мы можем просто проверять instanceof \Yiisoft\Di\Container, mehtod_exists() - это некорректный путь, нет гарантий что другие контейнеры не имеют метод с тем же названием, но другой логикой или сигнатурой.
Гораздо проще проверить instanceof \Yiisoft\Di\Container, сильно сомневаюсь, что сторонние контейцнеры будут реализовывать интейрфейс от yiisoft
источник

NO

Nex Otaku in Yii Framework 3
ISP
источник

RT

Roman Tsurkanu in Yii Framework 3
Dmitriy S
Гораздо проще проверить instanceof \Yiisoft\Di\Container, сильно сомневаюсь, что сторонние контейцнеры будут реализовывать интейрфейс от yiisoft
instanceof - первый признак плохого дизайна.
источник

В

Виктор in Yii Framework 3
Nex Otaku
А ещё лучше, под разные юзкейсы разные интерфейсы. Чтобы "потребитель" не знал о классе больше, чем он сам у себя использует.
Это точно. Но в этом контексте мы о конкретном случае, где один интерфейс является расширением другого (PSR-ного).
источник

В

Виктор in Yii Framework 3
Dmitriy S
Гораздо проще проверить instanceof \Yiisoft\Di\Container, сильно сомневаюсь, что сторонние контейцнеры будут реализовывать интейрфейс от yiisoft
Проще, вероятность такая мала, но зачем сразу обрубать эту возможность тому, кто захочет так сделать?
источник

NO

Nex Otaku in Yii Framework 3
Виктор
Это точно. Но в этом контексте мы о конкретном случае, где один интерфейс является расширением другого (PSR-ного).
Тогда для потребителей PSR используем PSR, а для потребителей расширенного делаем новый интерфейс.
источник

В

Виктор in Yii Framework 3
Nex Otaku
Тогда для потребителей PSR используем PSR, а для потребителей расширенного делаем новый интерфейс.
И я то же предлагаю. @yiiliveext считает, что будет лучше в объявленный в psr-интерфейсе метод добавить ещё 1 параметр.
источник

NO

Nex Otaku in Yii Framework 3
Не стоит ) Иначе это не стандарт а фиг знает что )
источник

DS

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

T

TradersVE in Yii Framework 3
What would be the use case of using yii-container-di, and a container composed of another package ?
источник

В

Виктор in Yii Framework 3
Dmitriy S
Два интерфейса уже попахивает нарушением SRP, имплементация нескольких интерфейсов допустима на низком уровне, вроде коллекций со встроенными интерфейсами, остальное ведет к неприятным последствиям. Я не утверждаю, что способ со вторым параметром лучший из возможных, но он явно лучше добавления еще одного публичного метода.
Мое мнение прямо противоположное: лучше уж еще 1 публичный метод в своем интерфейсе, чем нарушать имеющийся сторонний интерфейс 😄
источник

В

Виктор in Yii Framework 3
Нужны еще мнения, а обсуждение касается вот этого вопроса.
источник

В

Виктор in Yii Framework 3
источник

DS

Dmitriy S in Yii Framework 3
Виктор
Мое мнение прямо противоположное: лучше уж еще 1 публичный метод в своем интерфейсе, чем нарушать имеющийся сторонний интерфейс 😄
Ты немного не понимаешь тему. Я специально сделал так, чтобы контейнер строго следовал интерфейсу. Это приводит к тому, что ты в любой момент можешь поменять контейнер. Как только ты добавляешь в него левый публичный метод, ты сразу хоронишь эту идею. Твоя реализация является демонстрацией старой шутки. Если бы строители строили дома так, как программисты пишут программы ,то первый же залетевший дятел разрушил бы цивилизацию.
источник

NO

Nex Otaku in Yii Framework 3
Dmitriy S
Два интерфейса уже попахивает нарушением SRP, имплементация нескольких интерфейсов допустима на низком уровне, вроде коллекций со встроенными интерфейсами, остальное ведет к неприятным последствиям. Я не утверждаю, что способ со вторым параметром лучший из возможных, но он явно лучше добавления еще одного публичного метода.
ISP и SRP противоречат друг другу?)
источник

В

Виктор in Yii Framework 3
Dmitriy S
Ты немного не понимаешь тему. Я специально сделал так, чтобы контейнер строго следовал интерфейсу. Это приводит к тому, что ты в любой момент можешь поменять контейнер. Как только ты добавляешь в него левый публичный метод, ты сразу хоронишь эту идею. Твоя реализация является демонстрацией старой шутки. Если бы строители строили дома так, как программисты пишут программы ,то первый же залетевший дятел разрушил бы цивилизацию.
Мне все же кажется, что понимаю. Стоит
- изменить интерфейс
- использовать другой контейнер, в котором тоже есть второй параметр в has
- включить fail on warning
И твой вариант тоже перестает работать
источник

DS

Dmitriy S in Yii Framework 3
В любом случая следует признать, что пср-11 не позволяет полноценно строить приложения не глядя на реализацию контейнера. Впрочем, меня за это уже заминусовали полгода назад
источник

NO

Nex Otaku in Yii Framework 3
Если уж PSR используется, то приоритет должен быть у PSR. Именно в целях совместимости разных реализаций контейнера.
источник

DS

Dmitriy S in Yii Framework 3
Виктор
Мне все же кажется, что понимаю. Стоит
- изменить интерфейс
- использовать другой контейнер, в котором тоже есть второй параметр в has
- включить fail on warning
И твой вариант тоже перестает работать
Да, перестанет, но в твоем варианте от этого он работать не станет.
источник

В

Виктор in Yii Framework 3
Плюс моего подхода в том, что в работающем приложении реализацию контейнеров не меняют. А вот изначально попытаться совместить разные реализации могут. И тут наличие второго интерфейса спасает.
источник