
Artem
11.02.2019
20:10:37
Больше сущностей богу сущностей?
"правильный" ООП вообще подразумевает сущность на действие, много мелких объектов. Но "правильный" ООП не нужен в реальном мире, разве что Егору Бугаенко нужен, но это особый случай.

Aleksandr
11.02.2019
20:11:23

Den
11.02.2019
20:11:27
Ооппа, срачик

Artem
11.02.2019
20:11:32

Google

Konstantin
11.02.2019
20:11:35
Господа, ответьте же на мой вопрос, какое из зол выбрать? Нарушать DIP и порождать тысячи интерфейсов?

Den
11.02.2019
20:11:45
dypa ты где?

Artem
11.02.2019
20:12:21

Aleksandr
11.02.2019
20:13:20
Но при этом топишь за интерфейсы везде.
Ок.

Konstantin
11.02.2019
20:13:34

Artem
11.02.2019
20:14:15
Но при этом топишь за интерфейсы везде.
интерфейс -это контракт и с точки зрения проектирования и безнес задачи -это главное. Реализация никому не интересна, поскольку требования окружения могут менять и должны меняться. Нельзя проектировать завязываясь на реализации -это изначально только видимость решения

Konstantin
11.02.2019
20:14:17

Artem
11.02.2019
20:15:53

dypa
11.02.2019
20:16:47

Konstantin
11.02.2019
20:16:54

Google

Artem
11.02.2019
20:16:57
в той же java всегда были для слоя моделей DAO слои, где интерфейс на каждый класс, и ничего -работает. Код передается по наследству и успешно живет в проде под огромными нагрузками

Den
11.02.2019
20:18:26

Konstantin
11.02.2019
20:18:47
Хххех

Artem
11.02.2019
20:19:01
Количество файлов и кода удваивается , мне как разрабу вдвое больше работы
эту работу решает инструментарий, а колличество файлов не стоит ничего. Вот необходимость изменения контракта для проекта в проде -стоит много. Реализация всегда должна быть изолированна. Это же не просто код -это часть системы и изменение реализации -это не только изменение тестов, но и всего окружения. В случае использования интерфейса -контракт сохранен и ошибок быть просто не может.

Konstantin
11.02.2019
20:19:23

Artem
11.02.2019
20:20:52
но да это печально, мне самому больно смотреть на java проекты иногда, когда эти слои DAO просто обмазанны интерфейсами и классами с одним методом (UserDao / UserDaoImpl и т.д.). Но этот метод работает. Иначе как только проект выростает, документация теряется, а разраб увольняется -начинаются срочные задачи и даже те, кто хотели бы учесть все при внесении изменений -просто физически не могут это сделать

Den
11.02.2019
20:21:51
Солюшен - говнокод, как всегда

Konstantin
11.02.2019
20:22:28

Artem
11.02.2019
20:22:52
Солюшен - говнокод, как всегда
проблема в том, что этот говнокод каждый год поддерживать стоит дороже и в итоге продукт становится не жизнеспособен. Такой подход простой, да много файлов, но любой школьник знает, что они делают -все просто и поддерживать легко

Konstantin
11.02.2019
20:23:03
Выходит ядро PHP нарушает SOLID ?

Den
11.02.2019
20:23:58
Но я тоже нифига не джедай

Konstantin
11.02.2019
20:24:45
Артём, интересно услышать ваш ответ

Den
11.02.2019
20:26:42
Я точно знаю что не каждому классу необходим интерфейс. Но почему? Думаю Артем в курсе

Artem
11.02.2019
20:26:49
Выходит ядро PHP нарушает SOLID ?
у этого кода другие задачи. Его никто не будет использовать как исходники, поддерживать и расширять. Это просто использование оберток над Сишными структурами.

Pavel
11.02.2019
20:27:32
Выходит ядро PHP нарушает SOLID ?
Если ты подробно прочитаешь что написано в принципе D, то ты там не найдешь в упор правила что каждый класс обязан имлементировать интерфейс

Artem
11.02.2019
20:27:57
есть продукт, который продается, как конечный инструмент, а есть то, где изначально пользователем является тот, кто будет заниматься расширением и поддержкой.
пхп реализован на Си, там нет ООП и проектировали его слишком давно)

Konstantin
11.02.2019
20:28:25

Artem
11.02.2019
20:28:54

Google

Konstantin
11.02.2019
20:29:09

Artem
11.02.2019
20:29:54
смотря кто и как бы его писал, все дело в том, что инструменты на которых написан пхп не поддерживают ООП от природы
это же просто методика, если мы решаем задачи в стиле ООП то должны следовать принципам, поскольку они проверенны и доказанны
но это не панацея, есть масса задач которые решаются более эффективно другими способами
ООП -это проектирование продукта пользователем котрого будет програмист расширяющий функционал

dypa
11.02.2019
20:31:11

Konstantin
11.02.2019
20:32:10

Pavel
11.02.2019
20:32:27
интерфейс != абстракция

Artem
11.02.2019
20:33:06
да и вообще там же :: это же доступ к статикам и константам, а статиков в правильном ООП просто нет ))

Konstantin
11.02.2019
20:33:14

Den
11.02.2019
20:33:20

Pavel
11.02.2019
20:33:22

Artem
11.02.2019
20:33:39

Den
11.02.2019
20:33:56

Pavel
11.02.2019
20:33:58
А что же это тогда?
Абстракция - это то что ты сам в архитектуре выделил как абстракцию. Это может быть интерфейс, а может быть набор интерфейсов/классов какой-то.

dypa
11.02.2019
20:34:41
Привет WP)))
важнее ляпнуть любую глупость - лишь бы публично...

Pavel
11.02.2019
20:34:44
И принцип D нигде не требует чтобы у тебя каждый чих был абстракцией.

Den
11.02.2019
20:34:59
Ну класс - это абстракция по сути

Google

Pavel
11.02.2019
20:35:11
Абстракция это абстрактное понятие

Den
11.02.2019
20:35:15
Это не настоящая вещь
А лишь проекция

Pavel
11.02.2019
20:35:28
Которое абстрагировано от класса, интерфейса, абстрактного класса.

Den
11.02.2019
20:35:44

Konstantin
11.02.2019
20:35:48
ПЛОХО
class A {}
class B {
public function method(A $arg) { ... }
}
ХОРОШО
AInterface {}
class A implements AInterface {}
class B {
public function method(AInterface $arg) { ... }
}

Pavel
11.02.2019
20:36:09

kernel
11.02.2019
20:36:10
php:
str_replace()
python:
str.replace()

Pavel
11.02.2019
20:36:19
Оно говорит ровно то что говорит - про абстракции, а не про код.

Artem
11.02.2019
20:36:22

Konstantin
11.02.2019
20:36:27

Pavel
11.02.2019
20:36:49
Если ты в архитектуре мыслишь о таблице class Table со строками class Row и объявил что у тебя тут нет никаких абстракций, то и принцип D тут не применим.

Konstantin
11.02.2019
20:37:19

Den
11.02.2019
20:37:36

Artem
11.02.2019
20:37:36

Konstantin
11.02.2019
20:38:10
Шта?
Множественного наследования классов

Den
11.02.2019
20:38:56
Ну как бэ в JS одни трейты

Konstantin
11.02.2019
20:39:50
Речь о PHP

Google

Den
11.02.2019
20:39:54

Artem
11.02.2019
20:40:50

Konstantin
11.02.2019
20:41:00

Den
11.02.2019
20:41:23
Короче, репозиторий работает только с одной моделью, думаю поэтому там не интерфейс

Konstantin
11.02.2019
20:41:25

dypa
11.02.2019
20:41:30

Pavel
11.02.2019
20:42:11
Что дает тебе свободу интерпретации
Вот почитай что пишут умные диванные аналитики https://softwareengineering.stackexchange.com/questions/317371/should-every-class-i-write-adhere-to-an-interface

Artem
11.02.2019
20:42:33
Есть цепочкой
тогда как раз трейты или миксины лучше использовать, ну и все же это не множественное наследование, поскольку его главнй признак -это "алмазные" проблемы )

Konstantin
11.02.2019
20:44:07
Не встречал, чтобы кто-то решал это в PHP чем-то ещё

Pavel
11.02.2019
20:45:11

Artem
11.02.2019
20:45:36
там все сводится к тому, что если нужно свапать реализацию, то используем интерфейс, но прикол в том, что если мы пилим не свой проект по выходным, а работаем по найму, то априори должны писать код, в котором в конце концов кто -то изменит реализацию. Такова она работа по найму

Pavel
11.02.2019
20:47:29
> в конце концов кто -то изменит реализацию
Такого не бывает ни с того ни с сего. И до тех пор пока не понадобилось, плодить интерфейсы есть зло и нарушение принципов KISS/YAGNI

Konstantin
11.02.2019
20:47:32

Den
11.02.2019
20:48:43
Но есть класс Animal, и есть Dog и Cat, которые его расширяют. Метод принимает Animal. Подойдут ли Dog или Cat?