Size: a a a

2020 July 25

S

Sergey in PHP
доведи мысль до конца со своей позицией. Потому что отрывки только побуждают указать на некорректное сравнение или отход от темы инверсии зависимости
источник

SM

Sergey Milimko in PHP
Зависимость A->B
Инверсия A->C<-B
Т.е. просто добавляем третий программный модуль от которого зависят два предыдущих.
Природа третьего модуля определяется природой первых двух модулей и контекстом. Если A и B классы и у нас обычный ооп. То C это интерфейс. А если например A и B это микросервисы, то C,  допустим, событие.
источник

S

Sergey in PHP
принято, но это не имеет отношение к програмному коду, так что лично мне не очень интересно
источник

SM

Sergey Milimko in PHP
Что именно не имеет отношение к коду?
источник

SM

Sergey Milimko in PHP
Пусть А и B функции. Одна из уоторых вызывает другую. Тогда C это указатель на функцию. Язык C.
источник

SM

Sergey Milimko in PHP
И без полиморфизма
источник

A

Aleksandr Khristenko in PHP
А указатель на функцию это уже не полиморфизм?
источник

S

Sergey in PHP
именно) в этом суть полиморфизма
источник

S

Sergey in PHP
суть в том, что реализация может быть определена в рантайме
источник

SM

Sergey Milimko in PHP
Полиморфизм бывает разный. Вы про наследование много писали. Такого полиморфизма в с нет
источник

SM

Sergey Milimko in PHP
Ну и выше я сказвл что принцип сам по себе не связан с полиморфизмом
источник

h

h4rdc0d3r in PHP
Sergey
приведите плз 2 примера с классом который будет реализовывать два интерфейса:
1) и быть полностью SRP
2) не быть SRP
Все-таки интересно было бы на эту тему продолжение увидеть, или я пропустил что-то
источник

SP

Sergey Protko in PHP
Sergey
приведите плз 2 примера с классом который будет реализовывать два интерфейса:
1) и быть полностью SRP
2) не быть SRP
1. Encrypt decrypt интерфейсы для шифрования чего нибудь. Класс будет иметь одну причину для изменений и две роли.
2. Когда интерфейсы класса никак не пересекаются по смыслу. Например если класс user имплементит интерфейсы merchant и customer и контракт не подразумевает никаких пересечений. У нас причины менять код всегда будут разными и имеет смысл это дело разделить.
источник

SP

Sergey Protko in PHP
Объекты - как люди, интерфейсы как роли. Один человек иногда может выполнять больше одной роли.
источник

SP

Sergey Protko in PHP
Разработчик + qa смотрятся чуть органичнее чем разработчик + финансовый директор
источник

SP

Sergey Protko in PHP
Sergey
О, тогда накину. Недавно кто-то писал что несколько интерфейсов у класса нарушает SRP. Кто согласен, а кто нет? Почему?
Единственное что имеет значение для srp - причины изменения контрактов и поведения.
источник

SP

Sergey Protko in PHP
Этот принцип тем и сложен что без анализа того как модуль меняется не всегда очевидно нарушен принцип или нет.

Сам принцип помогает добиться более кохизев модулей, do one thing and do it well типа
источник

SP

Sergey Protko in PHP
Так же разделяя модули по причинам изменений мы получаем меньше изменений конкретных модулей в принципе. Это ведёт к более стабильному коду... Дальше на все это надо смотреть с позиции open close
источник

S

Sergey in PHP
По примеру 1. Какая может быть причина для изменения? Должна ли она обязательно одновременно затрагивать 2 метода encrypt/decrypt?
источник

SP

Sergey Protko in PHP
Sergey
По примеру 1. Какая может быть причина для изменения? Должна ли она обязательно одновременно затрагивать 2 метода encrypt/decrypt?
Например секопсы дали тебе пизды что ты вектор инициализации захардкодил. И тебе надо поменять с двух сторон как ты шифруешь и как дешифруешь
источник