Евгений Борисов - Spring Patterns для взрослых

Поделиться
HTML-код
  • Опубликовано: 17 дек 2020
  • Ближайшая конференция - Joker 2024, 9 октября (Online), 15-16 октября, Санкт-Петербург
    - -
    Сколько дизайн-паттернов вы знаете? 24? 36? 100? А сколько из них вы применяете в реальной жизни? 3? 5? 10?
    В этом докладе Евгений покажет, как при помощи Spring можно легко и просто реализовывать наиболее популярные паттерны, с которыми мы сталкиваемся в повседневной жизни. Chain of responsibility, strategy, command, lazy initialization, scala traits, AOP, proxy, decorator, и прочие паттерны и концепции, внедренные при помощи Spring, сделают ваш код мягким и шелковистым. А перхоть вашего boilerplate в виде switch-ей, статических методов, наследования, и прочей устаревшей шелухи, посыпется с вашего проекта под радостные крики сонара. Код станет более читабельным, гибким и поддерживаемым. Такой код проще обкладывать тестами и, наконец, это просто красиво.
    В этом докладе мы не будем ковырять внутренности Spring или пытаться его кастомизировать. Мы даже не напишем ни одного beanpost-процессора или стартера (разве что кастомный classloader). Только практические задачи и самый обычный, простой, добрый, пятый Spring.
  • НаукаНаука

Комментарии • 147

  • @poloplopol9791
    @poloplopol9791 6 месяцев назад +14

    Кажеться этот человек (Евгений Борисов) научил весь СНГ понимать спринг, сейчас эти вещи, что он говорит нужно само собой знать, а раньше наверно только крутые дядьки это знали и учили молодых где то, памятник при жизни ему , спасибо за ваши труды, буду рад смотреть новые конференции и всем рассказывать какой крутой мужик, этот Борисов Евгений

  • @polyackov_ot
    @polyackov_ot 2 года назад +47

    00:09:34 Singletons
    00:10:25 Singletons Концепция и Паттерн
    00:34:55 Тесты - Как поднять контекст только часть контекста - @ComponentScan(lazyInit = true)
    00:46:05 Преимущество field injection над constructor через @Autowired
    01:00:30 Open Closed principle broken
    01:25:13 GenericBeanDefinition
    01:37:18 Strategy and Command
    02:00:08 Реализация механизма добавления новых бинов в контекст без перезапуска приложения
    02:26:11 AOP
    02:30:00 Динамическая реализация pointcut
    02:39:44 Patterns which are easy with Spring

  • @redthebread
    @redthebread 3 года назад +68

    Обычно слушаю доклады на скорости 1.25, но Евгения приходится ставить на 0.75 :))

    • @abstractcoder1556
      @abstractcoder1556 2 года назад +2

      слушаю на 1.75 и норм

    • @zhennik263
      @zhennik263 3 месяца назад

      Смотрю на х3, как и все другие видосы, нормально

  • @user-qw1wh4dl2m
    @user-qw1wh4dl2m 3 года назад +146

    Вижу Евгения - ставлю лайк

    • @necromancer151
      @necromancer151 3 года назад +14

      вижу лайк для Евгения - ставлю лайк )

    • @citizen4_223
      @citizen4_223 3 года назад +9

      @@necromancer151 вижу лайк лайка для Евгения - ставлю лайк)

    • @opalev
      @opalev 3 года назад +2

      Пишите тогда сервис, который будет собирать деревом все комментарии где используется слово лайк, и курсивно его обрабатывать...
      ну вы поняли)))

    • @oeaoo
      @oeaoo 2 года назад

      Вижу лайк ради лайка - ставлю дизлайк.

  • @sapereaudeorbistertius1509
    @sapereaudeorbistertius1509 3 года назад +7

    Черт, когда Борисову будут давать достаточно времени и не гнать уже! Человек творит! Это то же самое что вырезать из Властелина колец почти час времени, для чего, хер знает, люди пришли насладиться фильмом, а не на работу, что бы уйти побыстрее)

  • @alexricher2554
    @alexricher2554 9 месяцев назад +8

    Икона, чем больше работаю, тем больше понимаю из конференций Борисова. ❤

  • @andd3dfx
    @andd3dfx 3 года назад +39

    Уже дошло до того, что на интервью в ответ на вопрос говоришь про бинпостпроцессор и Борисова - и интервьювер доволен

    • @user-ss2rj4wz5s
      @user-ss2rj4wz5s 3 года назад

      И что? Неадекватный интервьюер значит. Не Евгений же в этом виноват.

  • @silentadvisor
    @silentadvisor Год назад +6

    Сижу работаю из дома, фоном переслушиваю лекции Евгения. И тут на 51:00 такая прям совсем домашняя атмосфера :) Улыбнуло.

  • @MrMaksimsergeevich
    @MrMaksimsergeevich 3 года назад +7

    Божественно, особенно вторая часть доклада. Огромное спасибо организаторам

  • @solovey61
    @solovey61 3 года назад +42

    "Юль, батарея!" на 0:51:02

  • @user-uw7zm2og3u
    @user-uw7zm2og3u 5 месяцев назад

    смотрится на одном дыхании, Женя заряжает своей энергией. класс!!!

  • @Rostik13.96
    @Rostik13.96 3 месяца назад

    Доклад - пушка/бобма!💣
    Спасибо большое, Евгений & Co🤝

  • @mushen6987
    @mushen6987 3 года назад +27

    Евгений, как всегда на высоте, спасибо. Вот бы конференцию провели, где он не был бы ограничен по времени.

    • @Shaloplay
      @Shaloplay 3 года назад +7

      Тогда это будет самая длинная конференция в мире в одно лицо - т.к. Евгений в предмете прекрасно разбирается, любит этим знанием делиться и очень при этом увлекается, то остановится конференция, скорее всего, только после того как он сознание от истощения потеряет... Ну или жена заругает ))))

  • @Anna-tl2tb
    @Anna-tl2tb 3 года назад +2

    Спасибо, Евгений, как всегда интересно.

  • @sergeyivin6816
    @sergeyivin6816 2 месяца назад

    Как всегда круто. Спасибо Евгений за доклад

  • @user-do1ok5zw3u
    @user-do1ok5zw3u 3 года назад +53

    6:57 - старт

    • @cbot4425
      @cbot4425 3 года назад +1

      9:36 старт

  • @snowy0110
    @snowy0110 3 года назад +16

    Евгений, с вашими скилами выступления, вам бы народ про DDD просвещать, то цены бы вам не было :-) Без сарказма, правда очень жду.
    Я как для себя открыл синюю книгу про DDD, так просто не могу понять почему люди до сих пор так мало знают про такие базовые, но очень важные идеи, которые попросту _всюду_ в микросервисах, о которых вы, кстати, упомянули в начале видео, но вскользь. А про синглтоны мы уже слышали от вас много раз, но все равно спасибо.

    • @basicfuckboy4848
      @basicfuckboy4848 2 года назад

      умник чтоли? сам бери и просвещай, я 100% уверен что ты по DDD и TDD не пишешь

    • @qweezique
      @qweezique 2 года назад

      DDD == domain driven?
      Тоже очень интересна эта тема

  • @azatakhunov6061
    @azatakhunov6061 3 года назад +3

    Полностью посмотрел и законспектировал самые интересные места. Огромное спасибо! Однозначно лайк! :-)

  • @juliarekamie
    @juliarekamie 3 года назад +3

    Как всегда прекрасная дотошность 🙏🏻🎉

  • @ovlkv
    @ovlkv 3 года назад +1

    Отличный доклад, спасибо!

  • @dmitriypronichev7048
    @dmitriypronichev7048 3 года назад +5

    Фонд золотых цитат: "Все что угодно может быть бесконечно" )))))) Евгений, каждый доклад очень интересно слушать, спасибо!

  • @dmitrybekker1194
    @dmitrybekker1194 3 года назад

    Спасибо огромное! Очень круто!

  • @BigBigLeo
    @BigBigLeo 3 года назад +3

    Женя как всегда крут ) Спасибо!

  • @xandrviking1113
    @xandrviking1113 9 месяцев назад

    Евгений и ребята , как всегда огромное спасибо за отличный доклад 😊🥳

  • @aibeka.9453
    @aibeka.9453 3 года назад

    Спасибо, jeka borisov!

  • @nikitaproit
    @nikitaproit 3 года назад

    Отвечая на вопрос в описании: все что есть в докладе применяю. Этот доклад возможно будет хорошим стартом для кого-то. Евгений как всегда на высоте.

  • @linermgn
    @linermgn 3 года назад

    Евгений, спасибо ) очень интересно

  • @user-hq6nm2tf6j
    @user-hq6nm2tf6j 3 года назад +3

    Опа, супер - будет, что глянуть на выходных. Лайк сразу поставлю

  • @AlexMolchanov90
    @AlexMolchanov90 Год назад

    1:42:08 230 кейсов разбиваются на классы всего двумя тушками студентов-джунов и не за полгода, а за две ночи, потому что студенты обычно выбираются упоротые, которые ночь не спят и день не спят и не едят, а только кодят до полного выполнения задачи. Я помню, мне как-то выдавали задачи из техдолга в начале проекта, когда ещё работал джуном(правда тогда и понятия такого не было ещё, но суть та же) и там попадался switch внутри switch - это было весело разбивать и реально никто не сказал, что не надо упарываться, что народ работает неспеша, по 8-9 часов, что не нужно 2 дня без продыху кодить, но понял я это наверное лет через 5.

  • @esselesse
    @esselesse 3 года назад

    в примере с инжектом листа есть вопрос (но я не знаю, как его задать, ибо не попасть мне в телегу): а есть ли разница, будет ли каждый элемент листа прототайпом или синглтоном? ибо, так как мы ищем по имени бина, а бинов могло быть уже создано несколько на момент инжекта, не упадет ли это всё из-за "multiple bean error блаблабла"?

  • @guai9632
    @guai9632 3 года назад +6

    @InjectList({Баня.class, Водка.class, Гармонь.class, Лосоль.class})

  • @necromancer151
    @necromancer151 3 года назад +2

    отличная перезентация. почерпнул много интересного. Епаму привет! ) Жаль не на англ - поделился бы с коллегами

  • @Ivan54r
    @Ivan54r 3 года назад +36

    Обожаю Евгения, почти как бедкомедина

  • @daniilbaev2898
    @daniilbaev2898 3 года назад +26

    Начало с 6:55

  • @johnconstantine6331
    @johnconstantine6331 Год назад +1

    Евгений, у Вас со звуком проблема была из-за... Точнее проблема была не со звуком, а с производительностью, судя по количеству свёрнутый программ и тому, что при подключении зарядки проблема полностью исчезла. Если работаете под запись, лучше всегда ноут подключать к сети

  • @s.portowyi15
    @s.portowyi15 3 года назад

    Ну всё - работа встала!!!

  • @igorlu
    @igorlu 3 года назад +5

    Предлагаю называть концепцию "синглтон" "сингл инстансом", чтобы устранить путаницу. При этом синглтон это одна из имплементаций синг инстанса.

  • @snowy0110
    @snowy0110 3 года назад +2

    Нападки Евгения на синглтон меня смутили. intellij idea которую Евгений демонстрировал, сплошняком построена на классических синглтонах. Это видно из документации о том как плагины писать к идее.
    И все же, почему kotlin генерирует из object прямой singleton "анти-паттерн" (так же как и скала) и никому дела нет до этого? На этот прямой вопрос создатели kotlin лишь говорили, что следовали по пятам scala, а scala в свою очередь лишь только хотела заменить static на что-то более объектно-ориентированное, согласно моей дырявой памяти и моему гуглению года полтора назад. Для меня этот вопрос все еще открытый.
    Если практично подходить к проблеме, для меня классический синглтон имеет лишь следующие проблемы:
    * неявная зависимость (когда у меня неявная зависимость это spring transactional management, то это прозрачно для меня и для моей бизнес логики, но когда неявная зависимость это синглтон, который представляет собой бизнес идею, то это уже тяжело для моего тупого мозга, в особенности если это два-три-четыре жирных таких синглтона)
    * один класс на весь jvm (но ведь я хочу много инстансов в моих тестах, чтобы каждый тест был изолированным)

  • @user-wf7no6wm5l
    @user-wf7no6wm5l 3 года назад +3

    59:10 Я правильно понимаю, что тут ошибка? Когда spring выбирает beanName он пробегает по всем аннотациям бина и ищет там value, не только на аннотацию @Component смотрит

  • @gingun95
    @gingun95 Месяц назад

    40:46 вот может тогда не писать логику в сервисах, чтобы для её тестирования нужно было поднимать контекст? Плюс вопросец, а разве если у тебя будут разные конфигурации для тестов, то это будет плохо, потому что будут для тестов разные контексты подниматься. Вроде же контекст кешируется для тестов нет? А если это так и есть разные конфигурации контекстов, то это будет медленнее работать.

  • @mitinart
    @mitinart 3 года назад +2

    наушники sony wh-1000xm3?

  • @TsArtemi
    @TsArtemi 3 года назад +2

    Те синглтоны и свичи - это бэд патерн, а дефолты со спринг аннотациями в интерфейсах - это образец сингл респонсобилити и вообще правильного дизайна? ;) А вообще спасибо за контент, понравился доклад.

  • @izmailovlz
    @izmailovlz 3 года назад +3

    воу воу, а мне как раз прошлый доклад по спринг паттернам оказался недостаточным)

  • @AlexJPep
    @AlexJPep 3 года назад

    И всё таки, default в интерфейсе сделан для того чтобы поддерживать старый код, когда необходимо расширить интерфейсы (а в старом коде вы этого не сделаете). Другими словами, дефолтовые методы в интерфейсах, для того чтобы расширять интерфейсы библиотек безопастно с точки зрения поддержки ранее написаного кода на них (как это делает java для коллекций добавляя stream функционал). Тут же явно мы не пишем библиотеку, а пишем конечный продукт. Поэтому в данном случае лучше было сделать абстрактный класс для само регистрации, а не костылить default метод (который ещё и со спрингом в придачу!).

  • @user-tr5vo6le8f
    @user-tr5vo6le8f 3 года назад

    16:07 о каком докладе идёт речь? Что за доклад о том, что "мы в спринге похоронены"?

  • @monsstric
    @monsstric 3 года назад

    Евгения после этого вебинара предадут анафеме ))))

  • @vlera4198
    @vlera4198 4 месяца назад

    47:30 а что если объявить конструктор ломбока в спринге антипаттерном

  • @maxlich9139
    @maxlich9139 Год назад

    мастхэвный доклад для тех, кто работает со спрингом
    уже скинул его всем своим друзьям-программистам

  • @leonidiusnovikov188
    @leonidiusnovikov188 3 года назад

    в 2:00:00 у нас есть перевод list to map бинов, все классно работает. А как это протестировать. К примеру у меня 20 таких бинов. И как сделать чтобы они появились в тесте. Обычно я делаю @Spy. Но я хочу протестировать что все эти бины окажутся в map. Для этого можно конечно их всех перечислить, но тест получится бесполезным. Сейчас я придумал через reflection в тесте найти всех предков. Есть ли лучше решение?

    • @opalev
      @opalev 3 года назад

      точно такая же проблема возникла, через
      @Import({ExportServiceLevelOne.class, ExportServiceLevelTwo.class, ExportServiceLevelThee.class})
      решил сначала, потом сделал свой ImportBeanDefinitionRegistrar через него по типу интерфейса от которого наследованы классы в мапе регистрировал бины и оно работало. В ролике есть. Но! Мне под каждого теперь рестрары писать? Тем более что они только для тестов нужны.. Да и в @Configuration классе он глаза мозолит....
      Переписал регистрар с дженериками, но как его подключить и передать тип класса.. в @Import не понятно...

  • @alexandr9461
    @alexandr9461 Год назад +2

    В конце 2022 с ностальгией вспоминаются ковидные проблемы 2020 года, какое было прекрасное время

  • @TheRrash84
    @TheRrash84 3 года назад +17

    Как на всё это написать тесты?

    • @opalev
      @opalev 3 года назад

      да пздц)))

  • @user-kl7cw6rx2p
    @user-kl7cw6rx2p 3 года назад +1

    Тема "своя Spring Data" интересна! в стандартном спринге не поддерживаются графовые БД ...

    • @GameDeveloper1
      @GameDeveloper1 3 года назад

      Давно используем Spring Data Neo4j

  • @antonlakida7999
    @antonlakida7999 3 года назад

    Интересная идея с lazy component scan, при случае попробую для тестов (я как раз из тех, кто пишет конфигурацию и помечает мок бин @Primary =)). По поводу Знахарей и Лечения, тут очень похоже, что вы решаете задачи бизнес логики средствами фреймворка - когда Знахарь выбирает, какие виды лечений он применяет, то делать это спрингом - а тем более таким нестандартным способом - это немного не комильфо, на мой взгляд. Кстати, а в чем была бы проблема для знахаря просто сделать inject через конструктор и по списку с Лечениями сделать .filter { it::class in setOf(Баня::class, ...) } ?

    • @java_couch
      @java_couch Год назад

      идея конечно интересная, но не работает к сожалению

  • @DimaTiunov
    @DimaTiunov Год назад

    1:03:40 А почему нельзя было сделать пустой интерфейс и наследоваться им от Лечения назвав Алкоголь и не указать его в List?

  • @MaxPetrischev
    @MaxPetrischev 2 года назад

    @Lazy надо ставить над сервисом и над местом инъекции тогда будет работать

  • @sublimelolka4669
    @sublimelolka4669 3 года назад +1

    А есть ли Spring Patterns для детей?

  • @frimay1
    @frimay1 4 месяца назад

    00:59:24 - нашествие НЛО в вебку Кирилла

  • @lasta1r
    @lasta1r 3 года назад

    1:47:09
    - Что обычно делает дефолтный целитель?
    - Он говорит UnsupportedOperationException.

  • @almasabdrazak5089
    @almasabdrazak5089 2 года назад +1

    хм вот lazy в тестах это то что я искал , у самого в проде для каждого теста есть свой конфиг и при добавлении новых бинов все конфиги падают и хоть убей в оф доках я не нашел как с этим люди борятся

    • @java_couch
      @java_couch Год назад

      lazy это какая то дичь, мало того что не работает, так еще нужно понять, какие бины реально нужны, если тестируется сервис с кучей инжектов - это просто нереально использовать.. гораздо проще заварить нужные сервисы и потом мокнуть те , которые попросит тест

  • @pavelpetrashov2975
    @pavelpetrashov2975 3 года назад +45

    Паттерны, принципы.....но по факту spring driven development никак не связанный с паттернами и принципами. Да стратегии, команды, но и те реализованые не по принципам SOLID. Я бы назвал доклад - как можно сделать кучу всего используя рефлексию и спринг. Подробный разбор в комментарии глупо писать, но я бы поспорил с 80% сказаного
    P.S Мне нравятся доклады Борисова, я люблю спринг, но конкретный доклад, на мой субьективный взгляд худший из его докладов. Автор начинает видить везде гвозди, имея спринг молоток.

  • @zentox8480
    @zentox8480 10 месяцев назад

    37:35 Подтверждаю, все так и происходит.

  • @sshks10
    @sshks10 3 года назад +22

    В сотый раз про синглетон , зачем , можно же про что-то более актуальное поговорить в 2020.

    • @user-if3qj9wm5j
      @user-if3qj9wm5j 3 года назад

      Может потому что бесплатно?) Все более актуальное - платно)

  • @opalev
    @opalev 3 года назад

    мой коммент со ссылкой на гитхаб попал в спам фильтр похоже((
    админы канала, можете там перепрочитать и без ссылки вставить вопрос, а то я заново это всё не опишу, ну никак!

  • @adlhbgreqk
    @adlhbgreqk 3 года назад +1

    А почему спринг постоянно выдает предупреждение на @Autowired? Всегда пишет, ну, дружок, ты давай-ка лучше через конструктор это сделай.

    • @user-if3qj9wm5j
      @user-if3qj9wm5j 3 года назад +1

      Потому что через конструктор бест практис

    • @SkyAntins
      @SkyAntins 3 года назад

      @@user-if3qj9wm5j очень спорный бест практис. Не вижу существенных плюсов, кроме fail fast, да и не такая частая проблема - отсутствие нужного бина

  • @zuzu-wz9be
    @zuzu-wz9be Год назад

    последняя секунда:
    Раунд!

  • @markkovalyov9492
    @markkovalyov9492 3 года назад +1

    Интересный акцент у Борисова. Удивляет что он вместо приложения говорит - аппликация. Тут у меня, большого любителя искусств начинается kernel panic головного мозга :)

    • @anton-tkachenko
      @anton-tkachenko 3 года назад +2

      Это Израильский акцент :) на иврите не говорят "приложение", говорят "апликация" :)

  • @andreymanaenko1638
    @andreymanaenko1638 3 года назад +2

    Думаю: Надо же у Евгения речь обычная стала. А оказывается стояла скорость 0.75.

  • @user-jk9yz7gi1h
    @user-jk9yz7gi1h 3 года назад +1

    В магазах вдруг пропал Синглтон и я понимаю кто виноват), скрытая реклама?

  • @igorlu
    @igorlu 3 года назад +1

    Хорошо но мало (

  • @user-vf9in6ht7e
    @user-vf9in6ht7e 3 года назад +4

    59:24

  • @blaze7979
    @blaze7979 3 года назад

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

  • @adverte123
    @adverte123 3 года назад

    3 часа на одном дыхании

  • @Ariel-wn1cr
    @Ariel-wn1cr 3 года назад +1

    Тодд Говард и Кирилл Толкачев это один человек?

  • @aleksay2142
    @aleksay2142 3 года назад +6

    Эх) сколько живу работаю все эти паттерны все больше превращаются в антипаттерны)

  • @narwadikar
    @narwadikar 3 года назад

    Please explain in English video

  • @ushik70
    @ushik70 2 года назад

    Здравствуйте. Лекция очень полезная.
    Хотите ли немного критики от пенсионера, который в JAVA с 95 года? Когда она еще была только в Нетскэйепе?
    Складывается впечатление, что spring настолько крут, что тривиальные паттерны с ним невозможно реализовать без плясок с бубном, описанным в этой лекции.
    Безусловно это не так. И без спринга эти паттерны реализовывали. И как спринг смог этому помешать? Другой вопрос насколько помогает ? Просто автор почему то выбрал самый низкоуровневый способ реализации паттернов. Для того чтобы понять как работает спринг? Ок! Но ведь не только классы должны отвечать Single Responsibility Principal.
    В итоге из за деревьев леса плохо видно.
    И такой еще вопрос. Зачем похоронили XML context? Ведь все, что автор здесь рассказывал, на XML сделать можно "левой ногой". List. Map.
    Для удобства программистов?
    С каких пор удобство программистов, стало мерилом качества продукта, вместо удобства пользователей?Я не думаю, что для пользователей (поддержка, администраторы и т.п.) конфигурация на JAVA удобней конфигурации XML. Не говоря уже об конфигурации распыленной в виде аннотаций по куче java файлов.
    Ok, если вы делаете конфигурацию на JAVA, она должна быть управляемой другой конфигурацией в каком то формате в удобной для пользователе виде. Вы уверены, что программисты это делают?

  • @romandzhadan5546
    @romandzhadan5546 2 года назад

    top

  • @drspeeddv2768
    @drspeeddv2768 3 года назад

    Женя крут🔥👍💪

  • @des7710
    @des7710 3 года назад

    иногда @Lazy(false) тоже турба

  • @VladlenKaraush
    @VladlenKaraush 3 года назад

    Евгений, на 26:33 опечатка на слайде "speacial"

  • @karelalex
    @karelalex 3 года назад +9

    Увидев Кирилла, испугался, что опять будет парное выступление, к счастью, этого не произошло.
    Никого не хочу обидеть, но у Евгения лучше получается выступать соло.

  • @ruslansimakov9087
    @ruslansimakov9087 3 года назад +1

    Для меня Женбка - оргазм с первого раза)

  • @maxlich9139
    @maxlich9139 Год назад

    47:21 еще при field injection используется reflection, что не очень хорошо

  • @yankhonski9708
    @yankhonski9708 3 года назад

    @Bean
    public CustomPointcut() {
    return new CustomPointcut();
    }
    // Same applies to Exception....
    @Bean
    public DefaultPointcutAdvisor defaultPointcutAdvisor(final CustomPointcut customPointcut, final ExceptionHandlerAspect exceptionHandlerAspect ) {
    return new Default...(customPointcut, exceptionHandlerAspect );
    }
    In this case, you do not call initialization methods, but instead use already created beans.

    • @funbiscuit
      @funbiscuit 2 года назад

      When you call configuration methods, you also get beans. Because configuration is wrapped with proxy (cglib proxy) and any call to method marked as @Bean returns bean instead.

  • @UnitedFeodor
    @UnitedFeodor Год назад

    34:37

  • @TopToro
    @TopToro 3 года назад +1

    InhectList не нарушает разве OCP?

  • @UnitedFeodor
    @UnitedFeodor Год назад

    01:00:30

  • @antabis
    @antabis 3 года назад

    теперь я тоже буду говорить синглЬтон )

    • @stanislavkuzmin2611
      @stanislavkuzmin2611 3 года назад +1

      "сингАЛЬтон"

    • @antabis
      @antabis 3 года назад

      @@stanislavkuzmin2611 спасибо. точно!

  • @valery743
    @valery743 3 года назад +1

    @Repository надо если модульный проект, и слой репозиториев лежит в отдельном модуле
    Возможно я что то не так делал, но без @Repository интерфейсы CrudRepository не работали. Поправьте если не прав

  • @AndreiHorbach
    @AndreiHorbach 3 года назад +6

    2020 год, а звук нормально записать не можем

  • @dgvgfg
    @dgvgfg 2 года назад

    Patient это что?

  • @bananasba
    @bananasba 3 года назад +1

    Мда, сингл респонсибилити, а потом вдруг лукап по имени филда...

  • @user-cy3yi3cw4f
    @user-cy3yi3cw4f 3 года назад +1

    Всё здорово, но почему столько грамматических ошибок и опечаток в слайдах?

    • @alex_chugaev
      @alex_chugaev 3 года назад +2

      Потому что делал как студент, в ночь перед экзаменом.

  • @alexmur07
    @alexmur07 3 года назад

    хмм а материальчик то бу....

  • @caffeinejavacode1475
    @caffeinejavacode1475 3 года назад +1

    Е.Борисов, xml умер 🤣 ну, ну

  • @TheEyeItself
    @TheEyeItself 3 года назад +3

    Разбейте по блокам на ютубе. Пожалуйста.

  • @MykolaPapenko
    @MykolaPapenko 3 года назад +1

    Lajk!

  • @kirill_1117
    @kirill_1117 3 года назад

    Спринг паттернс для извращенцев)

  • @sinushkin
    @sinushkin 3 года назад +1

    чёж тормозит чёж тормозит - оказалось зарядка не включена. Вроде большой уже, а не знает что ноутбуки медленней работают без питания

  • @stasalesh9922
    @stasalesh9922 3 года назад

    Женя, че похудел так? Корона и коронтин??