@prophp7

Страница 1137 из 1387
Sergey
28.06.2018
18:22:44
трейты ненужны

Evgeniy
28.06.2018
18:23:12
"наследование классов нинужна!"
а если я придумаю кейс когда понадобиться?)

Google
Evgeniy
28.06.2018
18:23:28
когда наследование нужно

реальный пример

Sergey
28.06.2018
18:24:00
а если я придумаю кейс когда понадобиться?)
скорее всего это будет какой-то мерзский кастыль что бы не дублировать свойства, но это шаринг стэйта, а шаринг стэйта "нужен" опять же только как кастыль (например сегодня доктрина только так могет)

Evgeniy
28.06.2018
18:24:23
ну тут дело не в стейте будет

Sergey
28.06.2018
18:24:38
ну тут дело не в стейте будет
если не в стэйте и весь стэйт приватный - непонятно зачем тебе наследование классов

Evgeniy
28.06.2018
18:24:53
вот давай реальный пример приведу

Антон
28.06.2018
18:25:16
давай от обратного - накидай случаи когда ты видишь пользу в абстрактных классах?)
давай. Есть AbstractFilter, который содержит базовые методы для построения фильтра. Что то типа квери билдера. И есть унаследованые OrderStatisticFilter, ProductStatisticFilter, etc...

Sergey
28.06.2018
18:25:31
А почему нет)
ну я только один повод могу придумать - ограничить кому можно доступ к методам замутить.... и это для параноиков

Maksim
28.06.2018
18:25:45
Вон у меня агрегат и саги абстрактные. Там приватный стейт и пачка методов, что бы всё работало как задумано

Базовые классы, естессна

Антон
28.06.2018
18:26:01
в абстрактном есть общие для всех методы

Google
Sergey
28.06.2018
18:26:22
в абстрактном есть общие для всех методы
в 90% случаев эти общие методы там не нужны)

Evgeniy
28.06.2018
18:26:48
это как раз пример где можно наследование заменить легко композицией

а вот ситуация с твоим AbstractFilter и ты хочешь еще от кого то наследоваться (AbstractSorter)

вот тут твое наследование опечалит тебя а композиция обрадует

Антон
28.06.2018
18:27:28
давайте я покажу плохой пример на ларавел на гитхабе. А вы скажете как было бы иначе

ща найду такой фильтр

Bohdan
28.06.2018
18:28:04
ларавел сам по себе плохой пример, там много магии

Maksim
28.06.2018
18:28:37
ну я только один повод могу придумать - ограничить кому можно доступ к методам замутить.... и это для параноиков
Если стейт приватный, то минусов у наследованич становится на порчдок меньше. И выстрелить себе в ногу - невозможно

Evgeniy
28.06.2018
18:29:02
ща найду такой фильтр
все вызовы $this->method заменяешь на $this->filter->method в конструкторе создаешь $this->filter = new Filter;

Evgeniy
28.06.2018
18:29:08
и все зарефакторено

Антон
28.06.2018
18:29:23
ларавел сам по себе плохой пример, там много магии
да не важно это. В симфони тоже можно сделать плохо

Антон
28.06.2018
18:29:30
это не исходники ларавеля

https://github.com/laracasts/Dedicated-Query-String-Filtering/blob/master/app/QueryFilters.php#L40

вот тут queryBuilder и методы строятся

Evgeniy
28.06.2018
18:30:07
Maksim
28.06.2018
18:31:09
Фанатично отказываться от наследования я б не стал) а вот мозг включать, осознавая все риски - можно и нужно

Google
Evgeniy
28.06.2018
18:32:02
т.е. Внедрить как зависимость?
нее тут это не проканает доступ к методам не будет

по хорошему тут надо агрегацию заюзать

вторым аргументом передать класс контекста

но тогда ты анемированную хуйню создашь

Sergey
28.06.2018
18:32:38
Фанатично отказываться от наследования я б не стал) а вот мозг включать, осознавая все риски - можно и нужно
ну ты ж понимаешь что это вопрос подачи, если говорить что "не ну в абсолюты скатываться глупо, надо думать" то народ в большинстве случаев это просто воспринимает как "ну короч плохо но похуй"

Evgeniy
28.06.2018
18:32:44
и по хорошему так лучше не делать

Sergey
28.06.2018
18:32:44
и не думает в итоге

Evgeniy
28.06.2018
18:32:51
но это позволит сделать без наследования

Sergey
28.06.2018
18:33:08
правда бывает и другая категория людей которые по итогу скатываются в абсолюты... хер знает как короч

Evgeniy
28.06.2018
18:35:05
еще правильней методы фильтрации в билдере должны быть

Artem
28.06.2018
18:35:11
Если стейт приватный, то минусов у наследованич становится на порчдок меньше. И выстрелить себе в ногу - невозможно
А в чём минус протектед стейта? Подбивает на переопределение методов работы со стейтом в подклассах?

Maksim
28.06.2018
18:35:22
правда бывает и другая категория людей которые по итогу скатываются в абсолюты... хер знает как короч
Вот и надо про середину тереть, а не за крайности в стиле "в жопу наследование" или "акцессоры - рак")

Sergey
28.06.2018
18:35:22
Антон
28.06.2018
18:35:29
по хорошему тут надо агрегацию заюзать
есть пример кода с агрегацией, с композицией? любой пусть это будет исходник симфони.. чтобы протыкать все и осознать

Evgeniy
28.06.2018
18:36:59
и теперь этот queryFilters можно впихивать в другой класс

и вместо $this->apply вызывать $this->filter->apply

Google
Evgeniy
28.06.2018
18:38:04
только не забывать передавать контекст

но это так себе

Антон
28.06.2018
18:38:33
и теперь этот queryFilters можно впихивать в другой класс
и как в каждом классе фильтра опрелять этот метод apply() ?

он ведь для всех классов одинаковый и получится дублирование кода

Evgeniy
28.06.2018
18:39:05
Sergey
28.06.2018
18:39:05
https://gist.github.com/fesor/66d2e328c47e7ad39a5a63329f64ab00

Evgeniy
28.06.2018
18:39:46
если наследник реализует интерфейс и использует метод предка для реализации это мягко говоря жопа

Admin
ERROR: S client not available

Антон
28.06.2018
18:40:12
ну так он одинаковый

мне нужен один и тот же метод в 5 подобных классах

чо делать

Evgeniy
28.06.2018
18:40:29
так то что он относится к интефрейсу

надо в QueryFilters написать implements ...

Sergey
28.06.2018
18:40:45
Evgeniy
28.06.2018
18:40:47
чтобы это показать

Антон
28.06.2018
18:45:04
ну тоже самое к примеру с контроллерами

нафига абстрактный контроллер?

https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/FrameworkBundle/Controller/AbstractController.php#L37

Maksim
28.06.2018
18:49:01
Google
Sergey
28.06.2018
18:49:17
нафига абстрактный контроллер?
там много кода который шарится, бойлерплейт в основном

но поскольку задумка в том что там нет ни бизнес логики ни необходимости юнит тесты писать - в целом все счастливы. Хотя многие делают просто классы и инджектят зависимости туда. Например у нас так сделано сейчас

я правда к этому пока неоднозначно отношусь

Maksim
28.06.2018
18:52:26
https://github.com/mmasiukevich/saga/blob/master/src/Saga.php Пример абстрактного класса, в котором я особых проблем не вижу. Все на своих местах. Раскидывать где-то вне - не логично и нахер не нужно.

Sergey
28.06.2018
18:52:41
в целом.... у меня вот только апишки... а потому в контроллерах из зависимостей только пара сервисов которые нужны почти всем экшенам, остальные зависимости приходят в экшены контроллеров если нужны. А всякие там $this->json и т.д. я заменил на обработку результатов контроллера в листенере.

Maksim
28.06.2018
18:52:56
Коммент ток битый)

Копипаста - она такая)

Maksim
28.06.2018
18:56:01
хз, на вскидку не вижу почему бы и нет)
Это я к тому, что голова нужна не ток что бы в неё есть. Код не самый топчик, но в целом он безопасен

Если брать вашу реализацию, то у тебя, на скок я помню, всё в синглтоны вынесено. Эт мб и круто, но не в моем случае.

Artem
28.06.2018
20:37:06
А вот так адекватно использовать подтипы? Фактически только для того, чтобы соблюсти прекондишены из предметной области. https://gist.github.com/Guuzen/142eca85899fee7fddf3a79bf0ea6af0#file-gist1-php-L183

Sergey
28.06.2018
20:43:06
ну то есть да так можно, тут LSP нельзя нарушить потому что они и так разные типы

Artem
28.06.2018
20:48:00
ну то есть да так можно, тут LSP нельзя нарушить потому что они и так разные типы
я больше о том, что: 1. У подтипов Answer-а нет никакого особенного поведения 2. В методе attachAnswer вообще не используется состояние User-а.

да и у подтипов Question тоже нет никакого особенного поведения

Sergey
28.06.2018
20:57:51
хз тут надо уже задачу понимать, но в целом выглядит это чуть странно

Dmitry
29.06.2018
06:11:32
Всем доброго утра. У меня такой вопрос. Есть старая версия кода, в которой приходящий запрос фактически учитывается в 6 таблицах. Переписываю этот код и не до конца пойму как сделать лучше: создать 6 (не)репозиториев (gateway для общения с БД) или же все-таки 1, в которм собрать все запросы. В последствии, конечно, используются некоторые из gateway отдельно + как-то инжектить 6 нерепозиториев в класс выглядит убого.

Max
29.06.2018
08:00:27
Всем доброго утра. У меня такой вопрос. Есть старая версия кода, в которой приходящий запрос фактически учитывается в 6 таблицах. Переписываю этот код и не до конца пойму как сделать лучше: создать 6 (не)репозиториев (gateway для общения с БД) или же все-таки 1, в которм собрать все запросы. В последствии, конечно, используются некоторые из gateway отдельно + как-то инжектить 6 нерепозиториев в класс выглядит убого.
Обычно это признак того, что в твоей "модели" упущена сущность и она создаётся в рантайме на основе тех данных, так что надо глянуть на сущности которые есть. Один репозиторий на одну сущность, если у тебя 6 разных сущностей на одной странице то в чем проблема 6 реп. Другое дело если у тебя репорты или очень сложный ui там точно не надо использовать репозиторий

Dmitry
29.06.2018
08:05:52
Там не репорты, а именно upsert - запросы. Сущности... Пример, просмотр новости пользователем при переходе через utm_* метки. У меня есть сущность Visitor, которая заполняется разными параметрами и VO (от агентов, браузеров до информацией о последнем заходе). Мне нужно на основании данных о пользователе и новости учесть запрос в таблицах: логи запроса, затраты, агрегированная статистика новостей, инкремент новости в самой таблице и т.д.

Получается, что в класc NewsLogger я должен заинжектить все необходимы gateway'ы?

Evgeniy
29.06.2018
08:08:31
ну у тебя будет сущность которая отдается и у нее свой mapper на бд

Страница 1137 из 1387