
Sergey
27.04.2018
09:15:30
про фабрики разговор отдельный
сама постановка вопроса с этими "неизбежными злами" кажется неправильной

Antoine
27.04.2018
09:16:13
всё что можно сделать на моей стороне - сделано. переписывать чужие либы - не про меня
в краце проблема в инжекте вложенных объектов и их конфигурация

Google

Antoine
27.04.2018
09:16:58
когда нужно дёргать сеттеры каскадом по всем уровлням вложености
причём объекты классов из разных либ, которые спроектированы абсолютно поразному) и их нужно проинтегрировать
и фабрика эту проблему инкапсулирует

Dmitriy
27.04.2018
09:21:06
и эта проблема еще не скоро решится. С одной стороны все логично, одни объекты принимают другие объекты, которые уже сконфигурированы, т.е. их каждый нужно отдельно конфигурить. И то что либы разные по разному работают и конфигурируются и интегрируются - это тоже нормально. Нормально пока единого стандарта нет.
это блин и есть основная задача разработки решений - взять А и Б и заставить работать вместе.

Antoine
27.04.2018
09:23:09
в том то и дело что через DI я не могу сконфигурировтаь некоторые объекты т.к. в их конструкторы внедряются и классы и параметры которые известны только в момент получаения запроса от пользователя. я почемуто думал что симфони как фреймворк должна предусматривать решение таких проблем, а не увеличивать их.....

Sergey
27.04.2018
09:23:55
он же доступен только в момент запроса. С другой стороны - стал бы ты в http запрос пихать другие зависимости?
может быть стоит распределить ответственность по другому?

Dmitriy
27.04.2018
09:24:43
не, параметризованный контейнер из запроса - это чушь какая-то

Sergey
27.04.2018
09:26:08
короч я вижу проблему только с тем что в контейнер хочется запихнуть что-то явно не то
ну и фабрика или регистри надо - это надо уже понимать что ж ты там такое хранишь

Михаил
27.04.2018
09:42:12
Есть какие-то best practices для тестирования абстрактных классов?

Google

Артур Евгеньевич
27.04.2018
09:42:35
эээ
а что там тестировать, он же абстрактный?

Tex
27.04.2018
09:42:53
каждому абстрактному классу по абстрактному тесту
если он юзается просто как интерфейс - там и тестировать нечего.
если как хранилище для чистых функций - их и тестируй.
если как частичная реализация для переиспользования кода - тестируй наследников.
а вообще странный вопрос

Михаил
27.04.2018
09:46:34

Maksim
27.04.2018
09:48:01
норм

Tex
27.04.2018
09:48:08

Aleh
27.04.2018
09:50:08
если вы хотите его потестить, значит он уже не абстрактный и надо делать отдельный объект, а "наследники" вместо наследования должны юзать аггрегацию или декорацию

Tex
27.04.2018
09:51:05

Aleh
27.04.2018
09:51:27

Михаил
27.04.2018
09:51:52
Понятно. Ну на наследников тесты тоже будут, просто хочется как-то зоны ответственности в тестах поделить, чтобы в каждом тесте уделялось внимание функционалу одного конкретного класса, без разматывания всей иерархии композиции-наследования. Вот и ломаю голову.

Maksim
27.04.2018
09:52:12
а чем плохи абстрактные классы?)
изо дня в день 1 и тот же наброс) уже сродни "конструктор - это метод?")

Tex
27.04.2018
09:53:16
нет, я советую делать абсолютно противоположное)
абсолютно противоположное это "начать тестировать и впилить" )
а вообще я ж шучу. но таких радикальных советов не стал бы давать.
иногда работаешь с уже написанными системами, где всё это есть.
и когда тебе дают задачу "вот тебе пол дня, добавь сюда функционал и покрой его тестами", не будешь же ты отвечать, что всё говно и ты будешь это всё переписывать на полноценные классы и композицию.

Maksim
27.04.2018
09:54:10
да и в новых проектах используют абстрактные классы)
всё потому, что никто внятно объяснить что в них плохого не может)

Tex
27.04.2018
09:55:03

Maksim
27.04.2018
09:55:51

Roman
27.04.2018
09:56:45
если от них можно избавится, от них лучше избавится

Google

Maksim
27.04.2018
09:56:55
потому что гладиолус?)

Roman
27.04.2018
10:01:42
ну по моему опыту

Maksim
27.04.2018
10:01:59
сломать как?)

Roman
27.04.2018
10:02:38
изменяя код, вестимо

Maksim
27.04.2018
10:03:24
ну приведи пример того, что и как ты ломаешь. Я пока не представляю о чём ты

Roman
27.04.2018
10:04:50
привести пример как можно сломать дочерний класс изменив что то в родителе?

Maksim
27.04.2018
10:05:11
а ещё можно пару файлов удалить, да)
это не проблема абстрактных классов, если что
донный наброс в общем

Roman
27.04.2018
10:06:07
как хочешь

Maksim
27.04.2018
10:06:41
не, я понимаю, что модно нынче накидывать) но аргументация хромает.

Tex
27.04.2018
10:06:57
И, нет, я не топлю за абстрактные классы. Но аргумент "можно сломать" почти всегда не очень.
Руки тоже можно сломать, это не повод ими не пользоваться.

Maksim
27.04.2018
10:07:55
повторять, как обезьяна, проще, чем думать)
ну там можно было бы набросить что-то вроде "композиция вместо наследования", но и это не аксиома, так-то.

Roman
27.04.2018
10:08:38
может быть у вас другой опыт

Aleh
27.04.2018
10:45:22
ну т.е. goto тоже можно с умом юзать

Google

Maksim
27.04.2018
10:45:35
LSP?
и как он должен нарушаться?)

Aleh
27.04.2018
10:45:37
и эксепшены
это не значит, что используя абстрактные классы ты его нарушаешь

Maksim
27.04.2018
10:46:14
ну т.е. наследование плохо, ибо рукожопы?)
я тебе и без наследования такого наворочу, охринеешь разбирать)

Aleh
27.04.2018
10:46:19
да
точно также как goto
плохо только потому, что ментальная нагрузка растет очень сильно
и что у наследования нет юз-кейсов

Maksim
27.04.2018
10:48:41
а я не говорил, что композиции надо предпочитать наследование :)
но что реально не нравится - это то, что все повторяют, мол, наследование - это плохо. Потому, что .... (подставить своё. Обычно вместо многоточия чушь какая-то)

Aleh
27.04.2018
10:49:05
как много людей объяснит, чем плох goto?

Maksim
27.04.2018
10:49:51
да хер знает, плох ли он)
ты там выше верно заметил: в большинстве случае всё зависит от того, кто инструмент в руках держит)

Aleh
27.04.2018
10:50:47
так да, не надо давать красную кнопку ядерного чемоданчика детям

oleg
27.04.2018
10:57:38
А что тут объяснять, код становится unmaintable

Maksim
27.04.2018
10:58:40
схера ли?
опять вместо многоточия херню подставили)
зато на кривом английском, что бы модно было.

Sergey
27.04.2018
11:13:20
да хер знает, плох ли он)
- первоисточник: https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf
- разбор по первоисточнику: временно недоступен :(
- http://wiki.c2.com/?GotoConsideredHarmful

Google

Maksim
27.04.2018
11:13:47

Sergey
27.04.2018
11:14:15
жаль что разбор этой статьи недоступен... даже в гугл кэше

Aleh
27.04.2018
11:14:23
ну грубо говоря, дейкстра сказал, что goto плох, потому что в его модели верификации и анализа этот оператор с каждым применением добавляет новый уровень сложности и делает анализ почти невозможным
это конечно не значит, что не существует иной модели, где это все легко анализируется)
не существует = невозможно построить

Maksim
27.04.2018
11:15:50
и тебе спасибо)

Sergey
27.04.2018
11:19:09
https://web.archive.org/web/20180310093810/david.tribble.com/text/goto.html
нашел, вот это

Hell
27.04.2018
12:41:39
пинг
в этом чате можно задавать вопросы по древовиднным структурам в реляционных базах ?
Итак, у нас имеется некая хранимка, которая формирует список "действий" для интерпретатора
хранимка проходит по куче таблиц со связями и формирует выходной список действий
xml, но это не важно - интерпепретатор на стороне потребителя пока поддерживает только "линейный спискок действий "
в настоящий момент поддерживаются "вызовы" подпрограмм только без параметров
необходимо как то добавить поддержку вызовов с параттермами