
ustasby
10.02.2019
19:02:10
на самом деле нет, но говорить на эту тему не хочу

Pavel
10.02.2019
19:05:33

ustasby
10.02.2019
19:07:09

Google

ustasby
10.02.2019
19:08:36
взял проект китайский мультивендор, так там девочка фронтэндер без знания html, css и js, ну просто нулевая, даже в гит не может, в глаза не видела
ну фронт конечно кривой как будто в ie6
задаю вопрос, а оно надо такую, получаю в ответ других нет ))
абсурд же, так вот, если бы это был единичный случай, то ладно, но ведь через проект такие
фулстаки без знания php на проекте пхпешном и т.д.
такая боль
выдохнул, стул вроде живой, спс что выслушали

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

ustasby
10.02.2019
19:37:44

Den
10.02.2019
19:46:24

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

ustasby
11.02.2019
12:20:18
код приоожи на пастебин

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, кто в теме?

Den
11.02.2019
19:13:28

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

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
это значит, что под любой класс, какой бы я не создавал, мне нужно заводить интерфейс
Чтобы соблюсти DIP в моей программе придётся заводить сотни нтерфейсов, понимаете?

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

Google

Konstantin
11.02.2019
19:59:33
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

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

Artem
11.02.2019
20:04:55

Konstantin
11.02.2019
20:05:37

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

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

Den
11.02.2019
20:06:15

Artem
11.02.2019
20:06:16

Konstantin
11.02.2019
20:06:22

Artem
11.02.2019
20:06:27

Aleksandr
11.02.2019
20:06:29

Konstantin
11.02.2019
20:06:39

Google

Aleksandr
11.02.2019
20:07:30

Konstantin
11.02.2019
20:07:31

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
Без сбоев, зато ценой тысяч интрефейсов
интерфейсы дешевые, они ничего не стоят. Более того это контракт который позволяет изменять реализацию не ломая совместимость, это более чем оправданная стоимость, а то, сколько там файлов в проекте не имеет вообще никакого значения

Konstantin
11.02.2019
20:09:21

Artem
11.02.2019
20:09:49

Konstantin
11.02.2019
20:09:53

Aleksandr
11.02.2019
20:09:57