powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Оптимальное написание кода. Как сделать последовательное присвоение
25 сообщений из 133, страница 4 из 6
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095004
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
С моей точки от зрения, ценность конфигов (xml, yaml, props) в том что вы можете вносить изменения без переборки проекта. Это удобно для эксплуатации.


Если насчет конфигов - согласен.
То насчет приложения и создания бинов - нет.
С учетом CI/CD и микросеврисной архитектуры, то поменять код не сложнее, чем поменять конфиги.

Т.к. конфиги тоже надо тестировать. :-)

mayton

Любой девопс после консультаций с вами удаленно сможет поправить какой-то косяк.


Или добавить кучу новых.
Конфиги тестировать сложнее, чем код.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095007
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Девопс в состоянии сам протестировать пароль или токен. Тем более что на этом уровне уже некого больше призвать.

Впрочем мы скатились в конкретику. Я просто хотел сказать что сама идея переноса конфигов бинов из xml в java DSL несёт в себе технический долг. И его объем ещё
Никто не посчитал.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095010
mad_nazgul
Stanislav Bashkyrtsev
А вот SpringBoot.. Конкурентов у спринга не было, зачем было это придумывать - не понятно. В итоге якобы насколько простая штука как просто DI превратился во что-то что нужно изучать . И это настолько сложно дебажить.. Я вот уже 6ой год пишу проект который начали на SpringBoot'e, и всякий раз когда приходится что-то кастомизировать (выключить спринг бутовое и написать свое или внедриться в механизм) - приходится заниматься глубоким дебагом. Что-то, что раньше делалось за пару минут - на это иногда приходится тратить по несколько часов..


Попробуйте другие фреймворки. :-)
Micronaut, Microprofile и т.д.

Я попробовал...
При всей монструозности Spring/SpringBoot он всё-таки гибче чем новые "простые"/"легкие" DI-фреймворки.
Сам я использую Spring IoC где-то на уровне 2.5.6-3.0.0 версий. Меня вполне устраивает.

mad_nazgulНафиг XML.
Конфигурационные классы наше всио!!!!

Меня ещё с версии Spring 3 раздражали XML-файлы, для создания контекста.
А навигация по длинной портянке XML-файла это то ещё удвольствие.
Плюс SPEL - это жесть.

А в конфгиурационных классах можно логику создания бинов делать как хочешь.
Плюс можно насоздавать этих конфигурационных файлов можно под любой чих.
Включая/выключая их по своей извращенной логике.Я в целом не то чтоб ярый противник Java контекстов, но XML мне нравится больше:
1. Он намного короче как минимум из-за возможности autowiring'a. В Java бинах если есть конструктор, то тут уж компиляция потребует их вызвать явно. У меня счас в XML проекте почти все бины - однострочники. Properties конечно все равно приходится явно передавать в конструкторы, но таких классов не так уж много, да и все равно получается чаще всего короче чем в Java конфиге.
2. Они не перемешиваются с основным кодом. Если я хочу менять контекст, то я знаю что это XML и он хорошо выделяется на фоне классов. С Java конфигурацией меня раздражает то что сначала вбил пару буков для поиска, а потом еще в списке нужно искать контексты среди обычных Java классов.

Да, если нужно выполнить прям код-код во время создания бина, то в Java конфиге это проще. Но это такая редкость..

А вот аргумента что XML можно менять без перекомпиляции я никогда не понимал.. Если мы собрали JAR, то мы не будем его распаковывать чтоб менять бины. После сборки мы уже ничего внутри менять не будем.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095017
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
..он хорошо выделяется на фоне классов.

Очень точно подмечено.

Мне вообще кажется что должна быть какая-то наука которая объясняет нам почему русскому разработчику
удобнее читать BASIC чем 1С язык. Вот мне кажется что зрение на разных уровнях восприятия
доносит мозгу контекст. Даже без чтения кода я уже глазами вижу где конфигурация и где логика.

В случае с 1С это конечно вопрос спорный. Но вот я так себе это вижу. Мне даже жаль англичан.
Их английские комментарии в коде мало чем отличимы от кода. Особенно для SQL, COBOL e.t.c.
бизнес языков. Нужно обладать литературным талантом чтоб писать что-то яркое на фоне
ключевых слов.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095067
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav Bashkyrtsev

А вот аргумента что XML можно менять без перекомпиляции я никогда не понимал.. Если мы собрали JAR, то мы не будем его распаковывать чтоб менять бины. После сборки мы уже ничего внутри менять не будем.
в общем случае да, в конкретном - этап разработки, закидываем все в томкет директорию (без war), для перегрузки спринга делаем кнопочку (только для разраба) и не паримся. Потом обратно и делаем war. Скорость разработки увеличивается в "разы", ну или существенно.

Если захочешь попробовать, то вот перезагрузка типа jsp
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<%
    final Logger logger = LoggerFactory.getLogger("REFRESH");
    logger.info("начало перезагрузки приложения");

    StringResourceLoader.clearRepositories();

    logger.info("перезагрузка контейнера 'Spring'");
    XmlWebApplicationContext xtx =
            (XmlWebApplicationContext) WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
    xtx.refresh();
    logger.info("конец перезагрузки приложения");

    response.sendRedirect(request.getContextPath() + "/" + "тута куда");
%>
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095074
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется тут дело даже не в механике перезагрузки. Представте пятница. Вечер. (Вы в четверг выкатили релиз).
И вы уже в баре. Берете в руки бокал пшеничного. И тут ... херак. На телефон падает какой-то prod issue. Вы читаете
стектрейс. Фикс - фигня. Заменить точку на запятую. Но блин... открыть крышку ноутбука? Связаться с этим?
Испортить вечер? Есть вариант позвонить дежурному индюку. И растолковать ему на ломаном
саксонском - "Муниш... реплейс факен дот симбол виз факен комма... гуд лак энд хев е найс ивнинг..."

Потом снова взять в руки бокал. Вечер подпорчен но еще не совсем. Жить можно.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095100
Я вот еще вспомнил одну киллер-фичу XML: ему плевать на модификаторы доступа. Я могу объявлять классы package private (а это частая ситуация с feature by package ) и описать все бины в одном или нескольких XML контекстах.

В случае же Java конфига мне прийдется в каждый пакет добавлять по спринг контексту, что увеличит их кол-во во много-много раз.
am_sasaэтап разработки, закидываем все в томкет директорию (без war), для перегрузки спринга делаем кнопочку (только для разраба) и не паримсяБыл кстати какой-то инструмент для hot redeploy'a который умел и спринг контекст рефрешить.. Забыл как он называется. Правда он денежку стоил.

Это кстати сильно ли быстрей? Мне кажется что времени больше всего отнимает как раз инициализация спринг контекста. Хотя может рефреш как-то быстрей работает..
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095108
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Технология OSGI позволяет редеплоить по горячему. Ну по крайней мере делать такой себе blue-green deploy.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095113
Не, этот без изменений кода умеет, вот он: JRebel . Я правда с ним игрался последний раз лет 10 назад.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095175
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'ой бинов, по какому-то ключу.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095177
mad_nazgul
Stanislav Bashkyrtsev
Я в целом не то чтоб ярый противник Java контекстов, но XML мне нравится больше:
1. Он намного короче как минимум из-за возможности autowiring'a. В Java бинах если есть конструктор, то тут уж компиляция потребует их вызвать явно. У меня счас в XML проекте почти все бины - однострочники. Properties конечно все равно приходится явно передавать в конструкторы, но таких классов не так уж много, да и все равно получается чаще всего короче чем в Java конфиге.


Мне удобнее когда что-то падает на этапе компиляции, а не при поднятии контекста, когда я забыл передать нужный класс/бин.
Аннотациями @Component/@Service/@Autowired стараюсь не пользоваться
Ну да, но учитывая что почти все можно autowire'ить (без аннотаций, в XML), то в голову приходит только один юз кейс когда падает контекст - забыл бин добавить. Но опять же, кажется что это мелочь по сравнению с неудобствами Java конфига (для меня).
Stanislav Bashkyrtsev

2. Они не перемешиваются с основным кодом. Если я хочу менять контекст, то я знаю что это XML и он хорошо выделяется на фоне классов. С Java конфигурацией меня раздражает то что сначала вбил пару буков для поиска, а потом еще в списке нужно искать контексты среди обычных Java классов.


Если всё бины создавать через @Configure-классы, то вся "грязь" DI в них и остается.Тут не понял о чем речь.
Stanislav Bashkyrtsev

Да, если нужно выполнить прям код-код во время создания бина, то в Java конфиге это проще. Но это такая редкость..


Ну довольно частый case.
Когда нужно создать бин с Map'ой бинов, по какому-то ключу.Частый? Хм.. Мне такое 1-2 раза в жизни приходилось делать, но в XML это делается на ура https://stackoverflow.com/a/19437161/886697][1] . Во всяком случае пока ключ не динамический.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095182
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Component scan кстати создает накладные расходы для server-less приложений.
Мы его заменяли на явные указания зависимостей.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095402
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,

@Configure классы позволяют спрятать все кишки Spring'а в них.
Так чтобы коде бизнес-логики его не было.
Как минимум в сервисном слое - точно.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095405
mad_nazgul, а что, в XML это не так?
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095642
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
mad_nazgul, а что, в XML это не так?


Тут дело в удобстве.
Во первых создание контекста находиться в коде.
Это дополнительная проверка на этапе компиляции.
Меньше шанс, что что-то сломается в рантайме.
Легче поиск по коду.
Небольшие дополнительные плюшки создания своего starter.
Не надо учить SPEL и разбираться в километровых портянках XML. :-)
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095652
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 конфигурации.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095756
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
потому как не позволяет autowiring

не уверен, что понял смысл написанного. что ты понимаешь, под autowiring и в каком плане java based конфиги его не позволяют?

Stanislav Bashkyrtsev
Хотя SPEL все равно остается для @Value.

да, в минимальном объеме все равно полезно знать, еще как минимум в security полезно, если сложная логика
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095770
chpasha
Stanislav Bashkyrtsev
потому как не позволяет autowiring

не уверен, что понял смысл написанного. что ты понимаешь, под autowiring и в каком плане java based конфиги его не позволяют?
Ну если есть конструктор с параметрами, то в Java конфигурации не выйдет объявить бин и не описать параметры явно - компиляция не позволит. В XML конфигурации же просто ставим autowiring=true на весь XML, объявляем бин не описывая его конструктор - ну и все, дальше он по типу параметров найдет нужные бины. А там где надо - мы можем описать параметры явно.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095786
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Ну если есть конструктор с параметрами, то в Java конфигурации не выйдет объявить бин и не описать параметры явно

ты про такое что ли?
Код: java
1.
2.
3.
4.
5.
6.
7.
@Component
class MyBean {

     //или с lombok RequiredArgsConstructor + private final поля
      public MyBean(SomeDependency dep1, SomeOtherDependency dep2) {}

}



тут конфигурация вовсе не нужна - заинжектится либо по типу, либо если несколько реализаций, по имени бина dep1, dep2. можно еще помочь с Qualifier явно, но не обязательно. Единственное что без явного @Autowired идея не опознает как точку инжекции (пока не умеет она такого к сожалению, потому желательно налепить формально ненужный @Autowired на параметры)
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095787
chpasha, нет, это ты вообще package scan показываешь. Он не имеет никакого отношения к обсуждению XML vs Java.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095789
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле, ты говоришь "объявляем бин не описывая его конструктор"
т.е.
Код: xml
1.
<bean name="myBean" class="MyBean"/> 


тоже самое мы делаем без java based configuration просто объявив класс Component или Service. Или какой случай имеется в виду? Напиши пример
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095795
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P. S. или ты имеешь в виду случай, когда MyBean не наш и его нужно только через java based config создавать?
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40095799
chpasha , ты смешиваешь разные концепции:
1. Есть Java vs XML config
2. И есть package scan, который можно запустить хоть из Java, хоть из XML конфига

Мы обсуждаем вопрос о том что лучше если мы не используем package scan (сам я его в новых проектах вообще не использую, в старых - в перемешку). В случае XML конфигурации при описывании бина я не обязан описывать параметры конструктора:
Код: xml
1.
2.
3.
4.
5.
<beans ...
       default-autowire="constructor">

    <bean class="blah.BlahService"/>
</beans>

В случае Java конфигурации будет что-то такое:
Код: java
1.
2.
3.
4.
    @Bean
    BlahService BlahService(@Value("blah.feed.size") int feedSize) {
        return new BlahService(blahDao(), imageDao(), feedSize);
    }

А если эти бины в разных классах, то:
Код: java
1.
2.
3.
4.
    @Bean
    BlahService BlahService(BlahDao BlahDao, ImageDao imageDao, @Value("blah.feed.size") int feedSize) {
        return new BlahService(BlahDao, imageDao, feedSize);
    }

Либо такое:
Код: java
1.
2.
3.
4.
5.
6.
7.
    @Bean
    BlahService BlahService(ApplicationContext c) {
        return new BlahService(
                c.getBean(BlahDao.class),
                c.getBean(ImageDao.class),
                c.getEnvironment().getProperty("blah.feed.size", Integer.class));
    }
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40096089
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Ну если считать это проблемой.. Ну ладно. Хотя SPEL все равно остается для @Value.


Ну скажем у меня другой опыт.
Когда поднятие контекста использовался SPEL с кучей условий в зависимости от.
Как минимум для test/prod.

И IDEA не могла контекст разобрать.
Т.е. красный xml. :-)

Stanislav Bashkyrtsev

mad_nazgulв километровых портянках XML.
Это миф. XML компактней Java конфигурации.

Увы нет.
Для SprinBoot если использовать аннотации и DI через конструктор.
То можно обойтись двумя аннотациями @SpringBootApplication, @Component.

Если же использовать Конфигурационными классами.
То тремя аннотациями @SpringBootApplication, @Configuration, @Bean.
Плюс функция для создания бина.

Это если не использовать свои properties.
...
Рейтинг: 0 / 0
Оптимальное написание кода. Как сделать последовательное присвоение
    #40096098
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 как раз пропагандируют неправильное использование профилей. Во-первых, они прям в репозиторий с приложением записывают эти конфиги, во-вторых используют профили просто как набор свойств. Т.е. вообще не то для чего их придумывали..
...
Рейтинг: 0 / 0
25 сообщений из 133, страница 4 из 6
Форумы / Java [игнор отключен] [закрыт для гостей] / Оптимальное написание кода. Как сделать последовательное присвоение
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]