Здравствуйте, sergii.p, Вы писали:
SP>Можно конечно без этого. В С++ например до сих пор без рефлексии как-то обходятся. Но это просто ещё один инструмент, который иногда может улучшить код. В том же C++ находятся некоторые, которые говорят, что шаблоны не нужны. Ну да, 95% шаблоны не нужны, они их просто используют. Но знать инструмент и уметь его применять надо.
Если делаешь сериализацию без рефлексии, приходится каждое поле структуры дважды описывать: один раз в самом описании структуры и второй раз для сериялизатора.
А когда есть два параллельных описания одного и того же, рано или поздно они расползутся...
Здравствуйте, undo75, Вы писали:
u> ·>Я не понял о каком именно из "яп с рефлексией" ты спрашиваешь. В java, например, с отладкой всё просто замечательно. u> извини. вот у тебя динамически формируется класс.
Причём тут рефлексия? Это кодогенерация.
u> фиг знает как там на джаве, предполагаю, что как и везде. где точку останова ставить? )
Динамически это уже после запуска приложения? В этом случае может генерироваться байткод напрямую, поэтому класса в принципе может и не быть. Впрочем, вместе с байт-кодом можно генерить дебажную инфу и отладчик это всё будет видеть.
Как более разумный вариант — есть annotation processors, в каком-то смысле плагин к компилятору, позволяющий генерировать исходный код во время компиляции, хоть с комментариями и javadoc. Тогда это всё в sources и будет доступно для IDE.
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, sergii.p, Вы писали:
SP>>Можно конечно без этого. В С++ например до сих пор без рефлексии как-то обходятся. Но это просто ещё один инструмент, который иногда может улучшить код. В том же C++ находятся некоторые, которые говорят, что шаблоны не нужны. Ну да, 95% шаблоны не нужны, они их просто используют. Но знать инструмент и уметь его применять надо.
Pzz>Если делаешь сериализацию без рефлексии, приходится каждое поле структуры дважды описывать: один раз в самом описании структуры и второй раз для сериялизатора.
Pzz>А когда есть два параллельных описания одного и того же, рано или поздно они расползутся...
А при рефакторинге структур все равно надо делать совместимость.
И когда кодом пишешь это потом намного легче. И хотя у меня есть возможность пользоваться рефлексией делаю в 80% случаев делаю сериализацию отдельно.
Отдельно в файл и отдельно в REST API.
Здравствуйте, undo75, Вы писали:
U>для прикладника он вообще нужен? ни одной задачи с потолка не смог придумать. U>не ну я понимаю, орм там всякие. для прикладника нафига?
Здравствуйте, sergii.p, Вы писали:
SP>Можно конечно без этого. В С++ например до сих пор без рефлексии как-то обходятся.
Костылями, объездами на кривых козах и прочими моральными недугами обходятся.
SP>Вообще я вот считаю, что рефлексия должна быть времени компиляции. Это бы избавило от многих проблем отладки и скорости. Но Java и C# уже только могила исправит.
+ про CT reflect
SP>В том же C++ находятся некоторые, которые говорят, что шаблоны не нужны. Ну да, 95% шаблоны не нужны, они их просто используют. Но знать инструмент и уметь его применять надо.
В Java ct шаблоны и rt рефлексия.
В c++ rt шаблоны и (будет) ct рефлексия.
·>Причём тут рефлексия? Это кодогенерация.
это делается с помощью нее. в нашем случае
·>Динамически это уже после запуска приложения? В этом случае может генерироваться байткод напрямую, поэтому класса в принципе может и не быть. Впрочем, вместе с байт-кодом можно генерить дебажную инфу и отладчик это всё будет видеть.
можно, но нет )
·>Как более разумный вариант — есть annotation processors, в каком-то смысле плагин к компилятору, позволяющий генерировать исходный код во время компиляции, хоть с комментариями и javadoc. Тогда это всё в sources и будет доступно для IDE.
не делается )
Здравствуйте, undo75, Вы писали:
U>п.с. навеяно текущим местом работы, где на нем вообще все ) из-за этого отладка сильно затруднена.... ничего сложного, но все через жопу делается и занимает кучу времени. имхо выбор был мягко говоря не обоснован. видимо на истоках был юноша со взглядом горящим, который про это прочитал и его кто-то послушал. и панеслась... других предположений у меня нет U>в моей практике потребовалось лишь один раз.
А что, прикладной код не надо структурировать, не надо управлять сложностью? С другими компонентами не нало интегрироваться, не надо инструментировать свой код для логирования, отладки, мониторинга,перформанса итд?
Рефлексия это еще один иструмент, позволяет отделять мух от котлет.
Вам прежде всего тяжело, потому что вы прошли мимо этой темы.
Так часто бывает — один навесит атрибут, а другой пытается отладчиком постичь это намерение. Так не работает.
Если у вас кругом рефлексия, то нужно не отладчиком работать, а выяснять логику этой всей рефлексии, какие аспекты она применяет.
Вполне может оказаться так, что дело именно в том, что вы привыкли делать все по старинке.
Здравствуйте, undo75, Вы писали:
U>приватные методы — если есть потребность их дергать — признак плохого проектирования. U>про утиную типизацию не слышал )
Утиная типизация это аналог IDispatch, dynamic. Хорош когда есть куча свойств типа object c одинаковым набором имен свойств методов.
Для типизации надо распространять библиотеку, но проблемы могут возникать когда данная библиотека может часто изменяться и возникают проблемы с версиями.
Ну и использование в плагинах динамических языков.
Вот тут прекрасно подходят динамики работающие через рефлекшен
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, undo75, Вы писали:
P>>Вполне может оказаться так, что дело именно в том, что вы привыкли делать все по старинке.
U>посмешил ) код динамически созданный тоже внезапно работает "по старинке". только дотягиваться до него надо через задницу
Это ваше желание дотягиваться через задницу, т.к. опыта работы с рефлексией у вас нет. Покажите пример кода, где вся эта хитрая рефлексия, что бы предметно было.
Например, в AOP, orm, серилизации, di/ioc, http и прочих контролерах обычно нет необходимости дебажить — вам нужно просто запомнить основные правила.
Проблема обычно в том случае, если какой нибудь доморощеный di/ioc не покрыт тестами и следовательно содержит изрядное количество багов.
В этом случае нужно пенять не на рефлексию и ioc, а на отсутствие тестов и доморощенный механизм.
Соответсвенно, решать проблему не многодневным дебагом, а написанием тестов или заменой одного механизма на его взрослый полноценный эквивалент.
Здравствуйте, undo75, Вы писали:
u>>> поэтому вопрос — как обстоит дело с отладкой? U>·>Я не понял о каком именно из "яп с рефлексией" ты спрашиваешь. В java, например, с отладкой всё просто замечательно.
U>извини. вот у тебя динамически формируется класс. фиг знает как там на джаве, предполагаю, что как и везде. где точку останова ставить? )
Похоже под рефлексией вы называете system.reflection куда в дотнете понапихали чуть не все подряд
Расскажите, какая задача решается кодогенерацией?
Вам достаточно переделать кодогенератор таким образом, что бы вместо простыней генерировал вызов утилиты. Эту утилиту можно покрыть тестами, и в неё вы можете поставить точку останова. Т.е. минимальные изменения, достаточно безопасные.
P>Это ваше желание дотягиваться через задницу, т.к. опыта работы с рефлексией у вас нет. Покажите пример кода, где вся эта хитрая рефлексия, что бы предметно было.
извини, но нет. посодют )
да и вообще даже если покажу — без контекста понятно точно не будет
Здравствуйте, undo75, Вы писали:
U>для прикладника он вообще нужен? ни одной задачи с потолка не смог придумать. U>не ну я понимаю, орм там всякие. для прикладника нафига?
Свой, более лутшый Спринг и Энтити наваять
U>в моей практике потребовалось лишь один раз. U>была библиотека и требовалось дернуть закрытый метод. без него ну вообще никак. исходников не было. и все. за 20 лет практики..
Слабовато
А как же вот это вот все: побегать по названиям пропертей / методов объектов (например ваял как-то тестраннер, который по содержимому импортов в сборках определял, в каком конкретно тестфреймворке запускать тестики), сгенерить-запулить "на лету" какой-нить код в виде пользовательского скрипта? и еще 1001 применение?
W>А как же вот это вот все: побегать по названиям пропертей / методов объектов (например ваял как-то тестраннер, который по содержимому импортов в сборках определял, в каком конкретно тестфреймворке запускать тестики), сгенерить-запулить "на лету" какой-нить код в виде пользовательского скрипта? и еще 1001 применение?
а нафиг это все, ели по большому счету нужно джейсоны туда сюда гонять, да запросы в базу писать? упрощенно если.