
Sergey
23.12.2016
09:02:01
lazy ведь)
сделай запрос с джоином если не хочешь такое поведение

Mihail
23.12.2016
09:10:49
хм.. сделал запрос через билдер, приджойнил все что подтягивается, для всех сделал лейзи загрузку и всеравно у меня в выборке 10 класов, для них подтягивается 10 учеников отдельными запросами, ( я их юзаю, вот только заджоинил в общий запрос ) и к ученикам тянется еще к примеру список оценок ( хотя тое заджойнил)

Sergey
23.12.2016
09:11:23
а в селект их добавил?

Google

Mihail
23.12.2016
09:11:30
угу

Sergey
23.12.2016
09:11:58
точно добавил? ну можешь сделать partial load флаг
но сущности не будут валидными

Mihail
23.12.2016
09:13:10
все норм, спс ) там еще запросик надо быдло заджийнить
)

Sergey
23.12.2016
09:13:48
жирная выборка выходит наверное

Mihail
23.12.2016
09:15:27
ага, про студентов и классы это я так асбтракно)
но теперь норм с 40 мс прыгнуло до 13 на 10 записях )

Sergey
23.12.2016
10:20:14
http://symfony.com/blog/new-in-symfony-3-3-configurable-autowiring-setters ну вот, приняли именно этот вариант
я как-то раньше не обращал внимание на очень полезную функцию в ide - extract interface
мне о ней напомнили когда я пытался затроллить джавистов на последней конфе
щас вот юзаю, удобно епта
он прям за собой меняет везде упоминания о классе на интерфейс

Google

Sergey
23.12.2016
12:03:50
это как раз то о чем ты постоянно вспоминаешь @fes0r )

Sergey
23.12.2016
12:09:36

Sergey
23.12.2016
12:10:00
вот не поверишь, не юзал)

Sergey
23.12.2016
12:10:01
refactor -> move, refactor -> extract method....

Sergey
23.12.2016
12:10:07
не ну это понятно

Sergey
23.12.2016
12:10:10
refactor -> extract interface

Sergey
23.12.2016
12:10:13
все методы юзаю кроме интерфейса)

Sergey
23.12.2016
12:10:13
пыщ пыщ
и в дамках
ну я ленивая жопа и редко интерфейсы заранее делаю
и потому мне удобно

Sergey
23.12.2016
12:11:04
проверил на котлине, там прям в файле реализации по-дефолту он пихает интерфейс
привет из objc :D

Sergey
23.12.2016
12:12:06
)

Sergey
23.12.2016
12:12:41
хотя все равно не вижу смысла создавать интерфейс на каждый класс
как проповедуют зилоты solid
kiss,yagni как бы

Sergey
23.12.2016
12:32:38
> как проповедуют зилоты solid
а в каком месте они это проповедуют?

Sergey
23.12.2016
12:35:26
буковки O и D

Sergey
23.12.2016
12:35:27
SRP - только про зоны ответственности объектов, декомпозицию и кохижен. Про "делайте интерфейсы" ни слова
O/C - тут интерфейсы уже полезны, но это разного рода стратегии, акторы и прочее...
LSP - в целом тупо правила как правильно интерфейсы делать что бы не грустить когда делаешь O/C или ISP
ISP - тут да, используй интерфейсы для того что бы изолировать зоны ответственности объекта когда тебе с точки зрения SRP выгоднее все держать в одном классе. Способ снижения связанности и только. Соблюдение ISP + SRP выводит баланс между coheasion и coupling
DIP - изоляция модулей, опциональное, позволяет тебе просто между несколькими модулями инвертировать направление зависимости тем самым снизив связанность

Google

Sergey
23.12.2016
12:36:27
у тебя классы будут связаны, а значит будут передаваться другим. вот тебе и интерфейс на каждый чих

Sergey
23.12.2016
12:36:29
а главное - все это опционально, не надо на этом зацикливться. Все это должно приносить пользу и в итоге ты просто где-то живешь с чуть большей связанность а где-то где все плохо можешь ее снизить используя эти принципы
ну то есть... "интерфейс" в контексте SOLID это не отдельная сущность, это в целом контракт который должен соблюдать объект
а делать или нет этот контракт явно зависит от того что тебе дальше надо длать
если у тебя нет "нескольких реализаций" или вопрос выбора не стоит сейчас, то делать интерфейс просто так смысла нет
была такая хорошее правило для "архитекторов". Если мол у вас возник выбор "А" или "Б", то вместо того что бы принимать решение лучше откатиться и подумать, можно ли сделать так, что бы решение по этому выбору было несущественным.


Sergey
23.12.2016
12:39:20
ну так. у тебя щас только 1 реализация и не планировалось другой. ты завязался на нее и не сделал интерфейс. а потом резко потребовалась вторая, и ты не можешь ее так быстро заюзать, потому что SOLID нарушен

Sergey
23.12.2016
12:39:25
вот для этого интерфейсы и late binding собственно и нужны

Sergey
23.12.2016
12:39:37
поэтому чтобы был праведный солид тебе нужны интерфейсы почти на каждый чих

Sergey
23.12.2016
12:39:43
и SOLID не нарушен

Sergey
23.12.2016
12:40:04
у тебя завязка на конкретной реализации, как ты впихнешь другую?

Sergey
23.12.2016
12:40:18
выделю интерфейс
изменено 2 файла
система ничего не узнала
что теперь она завязана на интерфейс
а не на конкретную реализацию

Sergey
23.12.2016
12:40:52
это уже исправление нарушенного принципа

Sergey
23.12.2016
12:40:59
да нет никакого нарушенного принципа

Google

Sergey
23.12.2016
12:41:00
так можно и гавнокод не называть гавнокодом
его ж переписать можно

Sergey
23.12.2016
12:41:15
ну нарушил я DIP
ну и хуй с ним

Sergey
23.12.2016
12:41:26
ну это ты так считаешь
а я говорю за зилотов

Sergey
23.12.2016
12:41:50
DIP я всеравно буду соблюдать на определенном уровне

Sergey
23.12.2016
12:41:55
вон отличный пример зилотов - егор и его команда. они слепо делают то что им диктует CS и PMD

Sergey
23.12.2016
12:42:16
просто представь что у тебя конкретная реализация сейчас лежит в том же модуле что и все что его использует и при таком раскладе ты даже DIP не нарушал
а потом просто тебе понадобилось разделить модули
и ты такой пыщ пыщ и разделил, и DIP организовал

Sergey
23.12.2016
12:48:32
разве что так

Mihail
23.12.2016
12:51:22
прикольная тема
я про интерфесы)

Sergey
23.12.2016
12:51:50
прикольная тема late binding
а интерфейсы это лишь способ

Mihail
23.12.2016
12:52:42
надо почитать про раздел рефактор) я как то не очень его юзаю)
да и вообще я наверно юзаю 10% иде)

Sergey
23.12.2016
12:53:18
сначала рекомендую разобраться с live template-ами
можно сильно экономить время

Google

Sergey
23.12.2016
12:53:31
быстрее писать говнокод
а уже потом разбираться как рефакторить говнокод

Sergey
23.12.2016
12:53:49
темплейты рулз

Mihail
23.12.2016
12:54:04
)))
говнокод наше все

Sergey
23.12.2016
12:54:09
forek, pubf, pubsf

Sergey
23.12.2016
12:54:12
я пару месяцев назад потратил пару вечеров что бы разобраться и настроить... реально куча времени экономится
например в phpspec тестах я пишу it и оно создает мне function it_$() {\n}

Sergey
23.12.2016
12:54:54
ты на пхпюнит так и не перешел?)

Mihail
23.12.2016
12:54:55
и еще вопрос на засыпку кто то сталкивался с такими плагинчиками типа
https://highlightjs.org/

Sergey
23.12.2016
12:54:57
мелочь но дико удобно

Sergey
23.12.2016
12:55:03

Mihail
23.12.2016
12:55:06
не

Sergey
23.12.2016
12:55:12
а тьфу, перепутал название

Sergey
23.12.2016
12:55:14
так что не буду юзать phpunit

Mihail
23.12.2016
12:55:42
при большом кол-ве json браузер умирает (
и это пичалька(

Sergey
23.12.2016
12:55:57
я на junit пишу еще, поэтому как-то проще когда подходы одинаковые

Sergey
23.12.2016
12:57:50
просто phpspec дает мне кодогенерацию и мне это нравится