@phpclubru

Страница 799 из 956
Pavel
10.02.2019
19:05:33
да там все абсурд
Отличное описание IT ?

ustasby
10.02.2019
19:07:09
Отличное описание IT ?
прекрасное описание только на прекрасном айти, там все как есть, без приукрас

Google
ustasby
10.02.2019
19:08:36
взял проект китайский мультивендор, так там девочка фронтэндер без знания html, css и js, ну просто нулевая, даже в гит не может, в глаза не видела

ну фронт конечно кривой как будто в ie6

задаю вопрос, а оно надо такую, получаю в ответ других нет ))

абсурд же, так вот, если бы это был единичный случай, то ладно, но ведь через проект такие

фулстаки без знания php на проекте пхпешном и т.д.

такая боль

выдохнул, стул вроде живой, спс что выслушали

Юрий
10.02.2019
19:23:06
фулстаки без знания php на проекте пхпешном и т.д.
да такое очень часто.. только деньги у нормальных разработчиков отнимают.. как только хозяева таких могут допускать к работе.. их ведь проэкты и они должны быть заинтересованы чтобы найти специалиста а не просто человека который будет разводить их наденьги)

Den
10.02.2019
19:46:24
такая боль
Обожаю свой детсад )))

Vladimir
11.02.2019
12:17:47
Ребят, подскажите такой вопрос, хочу сохранить Емоджи в БД, один сохраняется а дальше весь текст обрезается, как это побороть?

Google
Vladimir
11.02.2019
12:20:37
База да

Влад
11.02.2019
12:37:52
Ребята,вы часто используете вьюшки в бд и когда стоит делать хранимые процедуры ?

ustasby
11.02.2019
12:40:46
Terminator
11.02.2019
14:09:36
Vera будет жить. Поприветствуем!

Сас
11.02.2019
14:32:59
Кто-то работает в web или phpstorm? Никак не могу убрать ошибку "JSHint: 'Promise' is not defined. (W117)"

Terminator
11.02.2019
19:07:48
@KonstantinKaretny будет жить. Поприветствуем!

Konstantin
11.02.2019
19:07:54
Всем привет, есть вопрос по последнему правилу SOLID - DIP, кто в теме?

Konstantin
11.02.2019
19:28:47
Задавай сразу
Правило DIP обязывает меня указывать интерфейс в качестве типа входящего параметра

https://github.com/wataridori/solid-php-example/blob/master/5-dependency-inversion-principle.php

строка 44

Если следовать этому правилу - придётся для каждого класса заводить интерфейс

Ведь объект любого класса может быть в дальнешем проброшен в качестве аргумента

Den
11.02.2019
19:31:12
https://github.com/Piterden/crosswords-module/tree/master/src Посмотри как тут

Konstantin
11.02.2019
19:32:23
Эт что?

Den
11.02.2019
19:33:13
Тут интерфейсы только у моделей и у репозиториев

Эт что?
API подбора слов по длине и известным буквам

Konstantin
11.02.2019
19:34:28
Нашёл

https://github.com/Piterden/crosswords-module/blob/master/src/Clue/ClueRepository.php

строка 31

Google
Konstantin
11.02.2019
19:34:44
нарушение правила DIP

Указано имя класса, а не абсракции

public function __construct(ClueModel $model)

Это противоречит последнему правилу SOLID

Den
11.02.2019
19:36:20
Почитай про паттерны репозиторий и презентер

В миграциях тоже модели

Artem
11.02.2019
19:41:21
Почитай про паттерны репозиторий и презентер
кажется он имел ввиду то, что туда ты мог передать ClueInterface или даже EntryInterface, репозиторий тут не при чем.

Konstantin
11.02.2019
19:42:56
Глянул примеры шаблонов репозиторий и презентер, это не совсем по теме и во многих примерах DIP также нарушается

Почему все нарушают это правило?

Artem
11.02.2019
19:44:00
ну и я бы сказал что репозиторий реализованн некорректно, поскольку он подразумевает использование интерфейса, а не реализации, но хз я код внимательно не смотрел и может быть оправданно название вводящее в заблуждени, но все дело в том, что многие считают репозиторий антипаттерном

Konstantin
11.02.2019
19:44:45
В любом случае мой вопрос отаётся открытым

Ещё раз, если следовать правилу DIP, мне всегда в аргументах нужно указывать не конкретные классы, а интерфейсы, а это значит, что под любой класс, какой бы я не создавал, мне нужно заводить интерфейс

Ведь объекты любого из моих классов могут пробрасываться в качестве аргументов

Artem
11.02.2019
19:47:30
ну я просто так влез с целью демагогии скорее, антипатерн это жестко, JPA довольно популярна, а там именно репозиторий. Просто в этой реализации от репозитория мало, что есть, там вообще по коду жесткие зависимости и потому о паттернах говорить сложно

Konstantin
11.02.2019
19:50:55
Ведь объекты любого из моих классов могут пробрасываться в качестве аргументов
class A {} class B { public function method(A $arg) { ... } } Это плохо, согласнго DIP нужно так AInterface {} class A implements AInterface {} class B { public function method(AInterface $arg) { ... } }

это значит, что под любой класс, какой бы я не создавал, мне нужно заводить интерфейс

Чтобы соблюсти DIP в моей программе придётся заводить сотни нтерфейсов, понимаете?

Aleksandr
11.02.2019
19:58:04
А зачем это вообще? Выполнять правило ради выполнения правила.

Google
Konstantin
11.02.2019
19:59:33
А зачем это вообще? Выполнять правило ради выполнения правила.
Я тоже пытаюсь понять зачем это, но SOLID это ведь краеугольный камень ООП

SOLID не просто так обязывет делать именно так, на это есть причины, но если следовать DIP у меня в программе будут сотни сущностей

Сотни интерфейсов

Aleksandr
11.02.2019
20:02:22
Не вижу вообще никакого смысла иметь интерфейс с одной реализацией в своей программе.

Konstantin
11.02.2019
20:03:10
Реализаций может быть множество, не обязательно одна

AInterface {} class A implements AInterface {} class B implements AInterface {} class C implements AInterface {} class D { public function method(AInterface $arg): bool { ... } }

Artem
11.02.2019
20:03:28
Я тоже пытаюсь понять зачем это, но SOLID это ведь краеугольный камень ООП
переиспользование. Интерфейс -эт опросто контракт и в результате может использоваться любая реализация без необходимости переписывать код. Пользы от этого много и да это принципиально и очень важно.

Aleksandr
11.02.2019
20:04:12
Там где несколько реализаций интерфейс ок. Но ведь а куче мест реализация только одна.

Artem
11.02.2019
20:04:55
Я тоже пытаюсь понять зачем это, но SOLID это ведь краеугольный камень ООП
на счет краеугольного камня не факт, дотачтоно Угорку почитать с его "трушным" ООП, там все сложней. Но передача в параметрах интерфейсов и без солида очень важный аспект любого проектирования

Там где несколько реализаций интерфейс ок. Но ведь а куче мест реализация только одна.
жизненный цикл ПО и тем более этого ПО проектирование подразумевает создание поддерживаемого кода, завтра будет использоваться дургая модель и любой программист обязан писать код упрощающий это изменение.

Konstantin
11.02.2019
20:05:37
Den
11.02.2019
20:05:52
Я никогда не видел репозиторий с интерфейсом в конструкторе

Konstantin
11.02.2019
20:05:57
Понимаете сколько будет интерфесов?

Artem
11.02.2019
20:06:16
Абсолютно верно, но опять же, чтобы соблюсти это - под любой класс, какой бы я не создавал, я обязан буду всегда заводить интерфейс
так и живет мир Java и все корпоративное ПО, кажется что много мусора, по факту работают десятилетия без сбоев

Konstantin
11.02.2019
20:06:22
Я никогда не видел репозиторий с интерфейсом в конструкторе
Это значит что шаблон репозиторий нарушет DIP

Artem
11.02.2019
20:06:27
Я никогда не видел репозиторий с интерфейсом в конструкторе
иначе это не репозиторий. посмотри реализацию JPA

Google
Artem
11.02.2019
20:08:00
Ага. Давай еще принцип yagni вспомним тогда.
при чем тут принцип? жестко завязываясь на реализации ты создаешь неподдерживаемый продукт. Вынуждая вносить больше правок при изменениях, чем необходимо. Это уже потери для бизнеса и ошибки проектирования. Это всегда плохо и разногласий в мнениях в конкретно этой части ООП -шной шняги нет и быть не может

Konstantin
11.02.2019
20:08:19
Мой вопрос - что хуже - нарушать DIP и порождать тысячи интерфейсов? Какое из зол выбрать?

Aleksandr
11.02.2019
20:08:30
Так можно дойти до абсурда и никогда не использовать new в коде, т.к. это прямая зависимость.

Den
11.02.2019
20:08:57
Презентер тоже получает сам объект, а не интерыейс в конструкторе

Artem
11.02.2019
20:09:08
Без сбоев, зато ценой тысяч интрефейсов
интерфейсы дешевые, они ничего не стоят. Более того это контракт который позволяет изменять реализацию не ломая совместимость, это более чем оправданная стоимость, а то, сколько там файлов в проекте не имеет вообще никакого значения

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

Страница 799 из 956