|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
mayton С моей точки от зрения, ценность конфигов (xml, yaml, props) в том что вы можете вносить изменения без переборки проекта. Это удобно для эксплуатации. Если насчет конфигов - согласен. То насчет приложения и создания бинов - нет. С учетом CI/CD и микросеврисной архитектуры, то поменять код не сложнее, чем поменять конфиги. Т.к. конфиги тоже надо тестировать. :-) mayton Любой девопс после консультаций с вами удаленно сможет поправить какой-то косяк. Или добавить кучу новых. Конфиги тестировать сложнее, чем код. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 09:22 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
Девопс в состоянии сам протестировать пароль или токен. Тем более что на этом уровне уже некого больше призвать. Впрочем мы скатились в конкретику. Я просто хотел сказать что сама идея переноса конфигов бинов из xml в java DSL несёт в себе технический долг. И его объем ещё Никто не посчитал. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 09:35 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
mad_nazgul Stanislav Bashkyrtsev А вот SpringBoot.. Конкурентов у спринга не было, зачем было это придумывать - не понятно. В итоге якобы насколько простая штука как просто DI превратился во что-то что нужно изучать . И это настолько сложно дебажить.. Я вот уже 6ой год пишу проект который начали на SpringBoot'e, и всякий раз когда приходится что-то кастомизировать (выключить спринг бутовое и написать свое или внедриться в механизм) - приходится заниматься глубоким дебагом. Что-то, что раньше делалось за пару минут - на это иногда приходится тратить по несколько часов.. Попробуйте другие фреймворки. :-) Micronaut, Microprofile и т.д. Я попробовал... При всей монструозности Spring/SpringBoot он всё-таки гибче чем новые "простые"/"легкие" DI-фреймворки. mad_nazgulНафиг XML. Конфигурационные классы наше всио!!!! Меня ещё с версии Spring 3 раздражали XML-файлы, для создания контекста. А навигация по длинной портянке XML-файла это то ещё удвольствие. Плюс SPEL - это жесть. А в конфгиурационных классах можно логику создания бинов делать как хочешь. Плюс можно насоздавать этих конфигурационных файлов можно под любой чих. Включая/выключая их по своей извращенной логике.Я в целом не то чтоб ярый противник Java контекстов, но XML мне нравится больше: 1. Он намного короче как минимум из-за возможности autowiring'a. В Java бинах если есть конструктор, то тут уж компиляция потребует их вызвать явно. У меня счас в XML проекте почти все бины - однострочники. Properties конечно все равно приходится явно передавать в конструкторы, но таких классов не так уж много, да и все равно получается чаще всего короче чем в Java конфиге. 2. Они не перемешиваются с основным кодом. Если я хочу менять контекст, то я знаю что это XML и он хорошо выделяется на фоне классов. С Java конфигурацией меня раздражает то что сначала вбил пару буков для поиска, а потом еще в списке нужно искать контексты среди обычных Java классов. Да, если нужно выполнить прям код-код во время создания бина, то в Java конфиге это проще. Но это такая редкость.. А вот аргумента что XML можно менять без перекомпиляции я никогда не понимал.. Если мы собрали JAR, то мы не будем его распаковывать чтоб менять бины. После сборки мы уже ничего внутри менять не будем. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 10:02 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev ..он хорошо выделяется на фоне классов. Очень точно подмечено. Мне вообще кажется что должна быть какая-то наука которая объясняет нам почему русскому разработчику удобнее читать BASIC чем 1С язык. Вот мне кажется что зрение на разных уровнях восприятия доносит мозгу контекст. Даже без чтения кода я уже глазами вижу где конфигурация и где логика. В случае с 1С это конечно вопрос спорный. Но вот я так себе это вижу. Мне даже жаль англичан. Их английские комментарии в коде мало чем отличимы от кода. Особенно для SQL, COBOL e.t.c. бизнес языков. Нужно обладать литературным талантом чтоб писать что-то яркое на фоне ключевых слов. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 10:26 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev А вот аргумента что XML можно менять без перекомпиляции я никогда не понимал.. Если мы собрали JAR, то мы не будем его распаковывать чтоб менять бины. После сборки мы уже ничего внутри менять не будем. Если захочешь попробовать, то вот перезагрузка типа jsp Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 12:11 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
Мне кажется тут дело даже не в механике перезагрузки. Представте пятница. Вечер. (Вы в четверг выкатили релиз). И вы уже в баре. Берете в руки бокал пшеничного. И тут ... херак. На телефон падает какой-то prod issue. Вы читаете стектрейс. Фикс - фигня. Заменить точку на запятую. Но блин... открыть крышку ноутбука? Связаться с этим? Испортить вечер? Есть вариант позвонить дежурному индюку. И растолковать ему на ломаном саксонском - "Муниш... реплейс факен дот симбол виз факен комма... гуд лак энд хев е найс ивнинг..." Потом снова взять в руки бокал. Вечер подпорчен но еще не совсем. Жить можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 12:26 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
Я вот еще вспомнил одну киллер-фичу XML: ему плевать на модификаторы доступа. Я могу объявлять классы package private (а это частая ситуация с feature by package ) и описать все бины в одном или нескольких XML контекстах. В случае же Java конфига мне прийдется в каждый пакет добавлять по спринг контексту, что увеличит их кол-во во много-много раз. am_sasaэтап разработки, закидываем все в томкет директорию (без war), для перегрузки спринга делаем кнопочку (только для разраба) и не паримсяБыл кстати какой-то инструмент для hot redeploy'a который умел и спринг контекст рефрешить.. Забыл как он называется. Правда он денежку стоил. Это кстати сильно ли быстрей? Мне кажется что времени больше всего отнимает как раз инициализация спринг контекста. Хотя может рефреш как-то быстрей работает.. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 14:13 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
Технология OSGI позволяет редеплоить по горячему. Ну по крайней мере делать такой себе blue-green deploy. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 14:16 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
Не, этот без изменений кода умеет, вот он: JRebel . Я правда с ним игрался последний раз лет 10 назад. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 14:26 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Я в целом не то чтоб ярый противник Java контекстов, но XML мне нравится больше: 1. Он намного короче как минимум из-за возможности autowiring'a. В Java бинах если есть конструктор, то тут уж компиляция потребует их вызвать явно. У меня счас в XML проекте почти все бины - однострочники. Properties конечно все равно приходится явно передавать в конструкторы, но таких классов не так уж много, да и все равно получается чаще всего короче чем в Java конфиге. Мне удобнее когда что-то падает на этапе компиляции, а не при поднятии контекста, когда я забыл передать нужный класс/бин. Аннотациями @Component/@Service/@Autowired стараюсь не пользоваться Stanislav Bashkyrtsev 2. Они не перемешиваются с основным кодом. Если я хочу менять контекст, то я знаю что это XML и он хорошо выделяется на фоне классов. С Java конфигурацией меня раздражает то что сначала вбил пару буков для поиска, а потом еще в списке нужно искать контексты среди обычных Java классов. Если всё бины создавать через @Configure-классы, то вся "грязь" DI в них и остается. Stanislav Bashkyrtsev Да, если нужно выполнить прям код-код во время создания бина, то в Java конфиге это проще. Но это такая редкость.. Ну довольно частый case. Когда нужно создать бин с Map'ой бинов, по какому-то ключу. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 17:20 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
mad_nazgul Stanislav Bashkyrtsev Я в целом не то чтоб ярый противник Java контекстов, но XML мне нравится больше: 1. Он намного короче как минимум из-за возможности autowiring'a. В Java бинах если есть конструктор, то тут уж компиляция потребует их вызвать явно. У меня счас в XML проекте почти все бины - однострочники. Properties конечно все равно приходится явно передавать в конструкторы, но таких классов не так уж много, да и все равно получается чаще всего короче чем в Java конфиге. Мне удобнее когда что-то падает на этапе компиляции, а не при поднятии контекста, когда я забыл передать нужный класс/бин. Аннотациями @Component/@Service/@Autowired стараюсь не пользоваться Stanislav Bashkyrtsev 2. Они не перемешиваются с основным кодом. Если я хочу менять контекст, то я знаю что это XML и он хорошо выделяется на фоне классов. С Java конфигурацией меня раздражает то что сначала вбил пару буков для поиска, а потом еще в списке нужно искать контексты среди обычных Java классов. Если всё бины создавать через @Configure-классы, то вся "грязь" DI в них и остается.Тут не понял о чем речь. Stanislav Bashkyrtsev Да, если нужно выполнить прям код-код во время создания бина, то в Java конфиге это проще. Но это такая редкость.. Ну довольно частый case. Когда нужно создать бин с Map'ой бинов, по какому-то ключу.Частый? Хм.. Мне такое 1-2 раза в жизни приходилось делать, но в XML это делается на ура https://stackoverflow.com/a/19437161/886697][1] . Во всяком случае пока ключ не динамический. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 17:37 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
Component scan кстати создает накладные расходы для server-less приложений. Мы его заменяли на явные указания зависимостей. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 17:57 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, @Configure классы позволяют спрятать все кишки Spring'а в них. Так чтобы коде бизнес-логики его не было. Как минимум в сервисном слое - точно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 08:14 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
mad_nazgul, а что, в XML это не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 09:46 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev mad_nazgul, а что, в XML это не так? Тут дело в удобстве. Во первых создание контекста находиться в коде. Это дополнительная проверка на этапе компиляции. Меньше шанс, что что-то сломается в рантайме. Легче поиск по коду. Небольшие дополнительные плюшки создания своего starter. Не надо учить SPEL и разбираться в километровых портянках XML. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2021, 09:48 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
mad_nazgul, многие из этих пунктов мы уже обсудили выше. mad_nazgulВо первых создание контекста находиться в коде.В смысле описание бинов? Ну да, в этом и заключается Java конфигурация. Только это не плюс и не минус, а просто констатация факта. mad_nazgulЭто дополнительная проверка на этапе компиляции.Это да. И это как плюс (проверка), так и минус (потому как не позволяет autowiring). mad_nazgulМеньше шанс, что что-то сломается в рантайме.Да. mad_nazgulЛегче поиск по коду.Не замечал. IntelliJ находит везде одинаково, вот только с XML сразу видно что это про контекст, а не про обычный Java код. Да и поиск самих контекстов сложней если они в Java. Т.е. по обоим пунктам выигрывает XML. mad_nazgulНебольшие дополнительные плюшки создания своего starter.Этого не знаю. Но наверно большинству все равно по барабану. mad_nazgulНе надо учить SPEL и разбиратьсяНу если считать это проблемой.. Ну ладно. Хотя SPEL все равно остается для @Value. mad_nazgulв километровых портянках XML. Это миф. XML компактней Java конфигурации. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2021, 10:14 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev потому как не позволяет autowiring не уверен, что понял смысл написанного. что ты понимаешь, под autowiring и в каком плане java based конфиги его не позволяют? Stanislav Bashkyrtsev Хотя SPEL все равно остается для @Value. да, в минимальном объеме все равно полезно знать, еще как минимум в security полезно, если сложная логика ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2021, 15:01 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
chpasha Stanislav Bashkyrtsev потому как не позволяет autowiring не уверен, что понял смысл написанного. что ты понимаешь, под autowiring и в каком плане java based конфиги его не позволяют? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2021, 15:46 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Ну если есть конструктор с параметрами, то в Java конфигурации не выйдет объявить бин и не описать параметры явно ты про такое что ли? Код: java 1. 2. 3. 4. 5. 6. 7.
тут конфигурация вовсе не нужна - заинжектится либо по типу, либо если несколько реализаций, по имени бина dep1, dep2. можно еще помочь с Qualifier явно, но не обязательно. Единственное что без явного @Autowired идея не опознает как точку инжекции (пока не умеет она такого к сожалению, потому желательно налепить формально ненужный @Autowired на параметры) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2021, 16:53 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
chpasha, нет, это ты вообще package scan показываешь. Он не имеет никакого отношения к обсуждению XML vs Java. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2021, 16:58 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
В смысле, ты говоришь "объявляем бин не описывая его конструктор" т.е. Код: xml 1.
тоже самое мы делаем без java based configuration просто объявив класс Component или Service. Или какой случай имеется в виду? Напиши пример ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2021, 17:04 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
P. S. или ты имеешь в виду случай, когда MyBean не наш и его нужно только через java based config создавать? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2021, 17:17 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
chpasha , ты смешиваешь разные концепции: 1. Есть Java vs XML config 2. И есть package scan, который можно запустить хоть из Java, хоть из XML конфига Мы обсуждаем вопрос о том что лучше если мы не используем package scan (сам я его в новых проектах вообще не использую, в старых - в перемешку). В случае XML конфигурации при описывании бина я не обязан описывать параметры конструктора: Код: xml 1. 2. 3. 4. 5.
В случае Java конфигурации будет что-то такое: Код: java 1. 2. 3. 4.
А если эти бины в разных классах, то: Код: java 1. 2. 3. 4.
Либо такое: Код: java 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2021, 17:24 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Ну если считать это проблемой.. Ну ладно. Хотя SPEL все равно остается для @Value. Ну скажем у меня другой опыт. Когда поднятие контекста использовался SPEL с кучей условий в зависимости от. Как минимум для test/prod. И IDEA не могла контекст разобрать. Т.е. красный xml. :-) Stanislav Bashkyrtsev mad_nazgulв километровых портянках XML. Увы нет. Для SprinBoot если использовать аннотации и DI через конструктор. То можно обойтись двумя аннотациями @SpringBootApplication, @Component. Если же использовать Конфигурационными классами. То тремя аннотациями @SpringBootApplication, @Configuration, @Bean. Плюс функция для создания бина. Это если не использовать свои properties. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 17:29 |
|
Оптимальное написание кода. Как сделать последовательное присвоение
|
|||
---|---|---|---|
#18+
mad_nazgulДля SprinBoot если использовать аннотации и DI через конструктор. То можно обойтись двумя аннотациями @SpringBootApplication, @Component.Почитай что я выше ответил chpasha . Ты точно так же пытаешься приплести здесь Package Scan (@Component). Его использовать можно безотносительно того в каком виде у тебя явная конфигурация - в XML или в Java. mad_nazgulТо тремя аннотациями @SpringBootApplication, @Configuration, @Bean.И вот описание @Bean зачастую оказывается более громоздким чем <bean>. mad_nazgulКогда поднятие контекста использовался SPEL с кучей условий в зависимости от. Как минимум для test/prod.Интересно было бы глянуть. Мне кажется ты как-то неправильно использовал контексты/конфиги. У нас не может быть ничего в объявлении бинов в зависимости от test/prod. Это просто конфигурация окружения - т.е. читаем свойства из конфига и передаем значения как есть в наши бины. А если ты объявлял разные бины в зависимости от test/prod (что само по себе плохо, но иногда не избежать), то: 1. Это решается профилями, и профили неправильно называть test/prod. Более корректно их называть по названиям включаемых/выключаемых фич, типа oauth2, saml; activemq, ibmmq. И уже конфиг окружения определяет набор включаемых профилей. 2. И с профилями прийдется опять же возиться хоть в XML, хоть в Java. 3. До 3.0.0 не было профилей, но в XML эта проблема все равно решалась просто: выносим отличающиеся бины в отдельный контекст и делаем импорт с переменной: <import resource="${mq}-context.xml" /> . Я вообще с трудом могу вспомнить те разы когда SPEL приходилось применять кроме как передать свойство или это свойство домножить на что-то ( #{some_prop_millisec * 1000} ). PS: интересно что многие туториалы по SpringBoot как раз пропагандируют неправильное использование профилей. Во-первых, они прям в репозиторий с приложением записывают эти конфиги, во-вторых используют профили просто как набор свойств. Т.е. вообще не то для чего их придумывали.. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 17:46 |
|
|
start [/forum/topic.php?fid=59&msg=40095642&tid=2120352]: |
0ms |
get settings: |
22ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
690ms |
get tp. blocked users: |
1ms |
others: | 300ms |
total: | 1087ms |
0 / 0 |