Браво! Как у тебя не заканчиваются идеи для видео? Git, docker, kafka, микросервисы - все, на мой взгляд, очень понятно и не совсем для зеленых. Сейчас еще и паттерны подъехали. А самое клевое то, что почти все это не привязано к языку. Мне вот, как с++ разработчику, очень приятно. Спасибо!
А что ещё можно разобрать? Помимо всего вышеперечисленного? Что ещё существует такое, не привязанное к языку, но желательное к ознакомлению каждым программистом?
@@RaptorT1V agile, system design, алгоритмы и структуры данных, те же паттерны, гит, докер, но глубже. Так еще многопоточное программирование, grpc, rest, websocket. Это то, что за 2 минуты в голову пришло
@@ozimandias1858 а почему именно все про Agile говорят, а не про Waterfall или RAD или Incremental and Iterative model? Это же из области программной инженерии, я правильно понимаю? Методологии разработки. Что за структуры данных? Что за алгоритмы? Какие-то конкретные, типа Дейкстры или Хаффмана? Какие именно паттерны? Что за многопоточное программирование (асинхронное, что ли?) и GRPC, REST, Websocket? И можно, пожалуйста, ещё примеров? Себе хочу записать, чтобы изучить.
@@RaptorT1V если честно, звучит как троллинг ;-) Для меня agile, потому что большинство компаний по этой методологии работают. А вообще да, можно со многими ознакомиться, понять, в чем разница и т.п. Структуры данных, как и алгоритмы - все с литкода чисто для собеседований. Паттерны - стратегия, билдер, фабрика, абстрактный метод, например. Остальное гуглится.
Ложка дегтя :) При использовании паттерна наблюдатель помните, что вы лишь скрываете связи между объектами, а не устраняете их. То, что ранее присутствовало в коде, теперь должно хранится в вашей голове или, что нечасто, в документации.
Я совсем не спец, но тоже подумал что зря он не объяснил этот момент. По логике, наблюдатель должен подписаться на события, т.е. в публикаторе нужен метод, который добавит наблюдателя в лист.
@@KhodorisfulТ.е. все наблюдатели у нас бины и они при инициализации листа прыгают в лист ?? Ну тогда это надо в конструкторе класса конкретно прописать каждое добавление экземплярами класса?? Да ещё и тип загрузки прописать как @lazy у каждого компонента ?? А то машина насоздает бинов и запутается в них (((
@@dimaskusidze подключите rx и не мучайтесь и генерацией 100500 классов ради 2+2. В ООП самое плохое что может быть это наследование и создание классов ради создания классов. Этот код их 100 тыс классов ни кто не сможет ни читать и не понимать. В rx есть и observer и map и filter и управление потоками. Причем это все работает ОДИНАКОГО на всех языках. В том же rxjs все тоже самое. Обсервер создается знаком доллара и это очень легко писать и понимать БЕЗ единого класса
паттерн классный, но лучше уже сразу рассказать про архитетурное решение EDA - event driven development, но уже есть видео про кафку, где это подробро рассказано. Кстати eda и в монолите работает отлично.
Красава, Влад, я сразу очень уместно применил его на своем проекте. Был сервис, который при создании сущности делал 3 доп. действия. Прошу продолжать рассказывать нам про подобные фишки
В начале (5:20) вы указали, что выполняемые действия могут зависеть друг от друга. Но до конца видео так и не указали на решение этой проблемы. Как раз наоборот - Наблюдатели ничего не знают (не должны знать) о других наблюдателях, ровно как и порядок "наблюдения" никак не регламентируется. Также в видео не указано, как организовать "подписку" на событие. Вы утверждаете, что мы исходный класс не правим. Но это не совсем верно - мы же должны добавить нового Наблюдателя в нашу коллекцию наблюдателей.
@АлексейСытник-э9т если что-то происходит автоматически - это все равно происходит. Я к тому, что изменение в исходный класс (регистратор) все равно нужно вносить. Не важно, вручную или автоматически
Не знаю говорил ли ты или нет, но можешь рассказать про свои первые задачи на первой работе, или может расскажешь какие задачи дают совсем новичкам (не стажерам, а работягам) в вашей конторе.
Привет. Спасибо за информацию. Но думаю, что у тебя неточность в схеме про публикатор. Он же записывает информацию в БД, а не отправляет ее напрямую слушателям, слушатели подписываются на события, т.е. делают запросы к базе. Это так?
Спасибо за видео, Влад! Как обычно с радостью посмотрел. Если я правильно понимаю, следуя принципам solid, ты как раз будешь придерживаться паттерна наблюдатель?
Привет, отдельного курса по Spring у нас нет, работа с этим фреймворком является частью программы интенсивного обучения - Java Буткемпа, где за 4 месяца ты изучаешь все ключевые инструменты и технологии, которые необходимы разработчику, чтобы получить работу! А также 3 октября в 19:00 по мск состоится вебинар - лекция “Основы Spring для начинающих Java Junior”, где разберем основы его работы, заходи по ссылке в шапке профиля!
Влад, спасибо огромное тебе за твой труд! Хотелось бы узнать, как и можно ли вообще устроиться на работу программистом в Европу если не было карьерного опыта? Буду благодарен за ответ
Добрый день, меня интересует один вопрос на каком устройстве или операционной системе проще работать, виндовс или иос макбук или какой-нибудь Леонова йога 9 вопрос не в деньгах, а в удобстве может совместимости программ, хочется начать заниматься программированием?
Смотря на чем программировать. Если нет прямой необходимости в винде (как в .net и т.п.), то ни в коем случае ее не использовать. Макбук хорош (качество железа на высоте, все эргономично и удобно), на линухе во всех остальных случаях
Так то да, классно! Вот только проблема есть, если у нас шина для сообщений нормально не сделана, то сиди и пытайся понять - кому что улетело и почему там что-то выстрелило. Сложность нельзя просто замести под коврик, ее можно перенести в другое место, но это, скорее всего, вызовет накладные расходы. Так что в реальной реальности все немного сложнее.
Если не сложно, хорошо бы еще сразу давать English-вариант всех названий ( а то иногда сомневаешься в переводе- то ли имелся в виду observer, то ли listener ).
Непонятно для других языков. Будет ли считаться "наблюдателем" если класс или микросервис создает посты, другой микросервис или класс мониторит появление новых постов в БД и шлет уведомления и т.д.?
Если телеграммом не пользуюсь, то зарегистрироваться не получится? Печально. Вообще мне нужно не сайт сделать, а сервер для Unity приложения (хранение данных по игрокам, регистрация всяких операций типа купил/продал/сделал) соответственно база данных и какой-то апи для взаимодействия из Unity.
Skillfactory отличная школа для изучения базы в программировании, я училась на графического дизайнера с нуля, до этого была экономистом и работаю по новой специальности, хочу пойти на бэкендера опять же в скиллфэктори тк опыт работы с ребятами разработчиками во время обучения мне был комфортен
Могу тоже сказать про sf, потому что они очень хорошие дают материал, и даже если нет никакого опыта помогут, объяснят и направят в нужном направлении изучения и закрепления материала))
Добрый день, меня интересует один вопрос на каком устройстве или операционной системе проще работать, виндовс или иос макбук или какой-нибудь Леонова йога 9 вопрос не в деньгах, а в удобстве может совместимости программ, хочется начать заниматься программированием?
@@Stalker-b7m главное не macos, Линукс лучше всего, а если с ним не дружите, лучше винда на неё много что можно поставить, на крайняк можно через виртуалку запустить Линукс для единичных случаев
События играют мегаклассно в Event driven архитектуре) там ты паблишера и консумеров можешь разносить аж в разные микросервисы) Событие кладется в брокера сообщений, и далее его получают все, кто подписан на данное событие. ВААААУУУУУ
А вообще, можно создать такой класс наблюдатель, который имеет метод запуска, который на вход получает, не только объект события, но тип события. И после этого можно вообще в основной клас не заходить, а просто добавлять модули :) Прилижение с подгружаемыми модулями :)
Я вот сейчас тоже подумал, что в этом примере не рационально, что продюсер отправляет событие всем наблюдателям в списке.. Лучше отправить одно событие в некий сортировщик который сам решит по типу события что с ним делать и какому наблюдателю отправить.
@@PavelNebo на один и тот же тип события может быть куча разных получателей, каждый из которых обрабатывает его по своему. Эта концепция например широко используется в кафке - на один и тот же топик может быть создано куча консьюмер групп, обрабатывающие одни и те же события по своему, независимо друг от друга.
@@TimLaizaR228 ну я это и описал. Отдельный клас который занимается распределением событий по нужным получателям, а продюсер отправляет одно событие в этот класс
на самом деле самый популярный паттерн - это стратегия, где-то даже исследование было) и ты как раз его реализовал на самом деле обсервер должен подписываться, на обсерваблы, которые генерируют нотификации, у тебя же прямая передача в потребителя не может фича сама по себе подписаться на сохранение поста, ты в классе сохранения сам добавляешь фичу
По GOF, subject хранит в себе наблюдателей и уведомляет их при наступлении события (метода Notify) с передачей этого события, также в самом наблюдателе может хранится ссылка на наблюдаемый объект (subject), чтобы тот при уведомлении сам мог запрашивать необходимую информацию. Посмотрите книжку там все понятно описано
Полезная фитча такого паттерна - отмена события.. Если один из наблюдателей проверив условия не одобрил дальнейшие действия с данным обьектом - все остальные будут в курсе и так же пропустят мимо обработки.
"Отдельными компонентами программы являются классы и объекты"? Vlad, ты уверен что хорошо сформулировал свою мысль? Класс - это design-time (если речь не идет про static class - там есть ньюансы), а объект - это run-time.
Получается, что PostSaver занимается больше чем одной задачей. Его код постоянно необходимо править , добавляя новых наблюдателей да и еще код их вызова циклического постоянно будет во всех подобных классах с наблюдателями. А если потом окажется что не про все посты нужно отправлять уведомление? По-моему логика оповещения должна быть вынесена на уровень выше, где вызывается сам PostSaver.
Автор видео не понял как работает этот паттерн. Да и вы тоже. Если окажется, что уведомления нужно отправлять не на все посты, то одписчик отправляющий уведомления сам может решить это на основе информации из события. Как я написал ниже в своём коментарии - PostSaver это по сути модель, если брать архитектуру MVC. Модель ничего не должна знать о подписчиках (вот эти все классы уведомлений, рекламы, статистики). Она должна знать всего об одном классе - классе Наблюдателя. Одного. И после сохранения поста бросать событие в этот Наблюдатель, вы зывая его метод accept(event). А уже Наблюдатель знает кто подписан на принимаемый им тип событий и он отправляет это событие обработчикам (классам работы с уведомнениями, рекламой, статистикой). Таким образом у нас получается чистая модель, код которой мы больше не трогаем. Это позволяет использовать её в других местах, для кототых, например, вот эти все уведомления, статистика, реклама не нужны. А также эта моель легко покрывается тестами, потому что не содержит в себе лишних классов.
На счёт вынести логику оповещения выше. В целом, да, она обычно вынесена выше. Но это реализовано не вынесением её туда, откуда вызывается этот PostSaver, а вызовом её в событиях модели. Но там реализован такой же паттерн Наблюдатель. Поэтому в контексте обучающего видео, эти вещи приплетатть сюда не стоит, чтобы не усложнять понимание сути паттерна. Т.к. это уже касается не паттерна как такогвого, а конкретной реализации.
@@testdeim Инжектим PostObserver где прописана логика оповещение что кому и при каких условиях. В PostSaver мы только один раз вызываем PostObserver и передаем туда актуальный объект Post. Это годится если в самом Post есть вся необходимая информация для того чтобы решить уведомлять или нет. Но что если отправка будет зависеть от каких либо других факторов, о которых нет информации в Post? Прокидывать какой то "notify=false" флаг?
@@Khodorisful тут либо в ивент добавляем нужную информацию (не обязательно же в ивент кидать весь объект Post и/или только его). Тоесть собираем ивент со всеми нужными данными (хоть весь Post, хоть его часть, хоть ещё чо то кроме него, да хоть бы и тот же notify=false). Но notify=false можно в том случае, если PostSaver обладает информацией о том делать ли уведомление. Но обычно не обладает и не должен. Эту информацию знает (или должен узнавать) непосредственно сам обрабочик события. Если брать в пример уведомления, то класс отправляющий уведомления, принимает событие с постом, понимает из него какого типа этот пост, делает запрос в хранилище пользователей у которых настройка "получать уведомления" и им отправляет эти уведомления. Ни сам PostSaver, ни Наблюдатель ничего знать не знают об уведомлениях и не должны.
если он меняет сам пост, а не просто реагирует на него, то это не обсервер :) Это происходит на этапе создания и сохранения поста, то есть до того как мы создаем событие
@@fakng-engineer ну так у тебя сохранение в бд, потом вызов n действий не связанных с бд, что если на каком-то что-то пойдёт не так? т.е. в итоге данные не сохранятся, а какое-то количество чего-то куда-то улетит. я без претензий, просто они же копипастить будут и в итоге в тысячах контор будет гнкод.. а это издержки.
Я конечно не 7, а всего лишь 6 лет в индустрии. Но меня ни разу ни на одном собеседовании не спрашивали про этот паттерн. Хотя собеседуюсь довольно часто. Пару раз было такое, что меня спрашивали о том, какие паттерны я знаю и просили рассказать про парочку. Обычно первыми на ум приходили: стратегия, фабрика, синглтон.
Но ведь теперь каждый класс наблюдатель будет получать событие, которое может быть не для него и фильтровать его уже внутри себя. Получается некоторый оверхед производительности
@@MrRomanvideo, странный вопрос. Эвент в методе accept как раз и разбирается на части. На те части, о которых метод accept знает. Ну а те, о которых не знает, те в данной конкретной фиче и не нужны.
Разработчик из Амстердама , скажи хватит ли у тебя оперативки на все объекты в твоей «Мега крутой соц сети»? Если бы ты рассказывал это в контексте SOLID принципов, то в целом ок. Но ты суешь это в идее где у тебя будет много событий , а значит у тебя рано или поздно оперативка кончится и привет memoryExeption
Запишет сообщение в брокер сообщений который доставит его получателям на каком угодно количестве серверов. Да и это очень уж нужно постараться чтобы забить память просто инициализацией обьектов)
Этот ролик наглядно демонстрирует отсталость Java от C#. В С# весь этот "паттерн" реализован на уровне самого языка (Events) и доступен разработчикам в готовом виде (да еще и с кучей дополнительных фишек) сразу "из коробки". В Java же нужно писать все самому ручками, со всеми погрешностями и дальнейшей дополнительной поддержкой.
Нихрена не понял. Начал с функции, в которую мы напихиваем вызовы других функций, а потом перескочил к событиям. Откуда взялись события, чего ради это должно быть проще спронктировать?
Я прошел только за год 10 собеседований и ни на одном не спросили про паттерн этот. Звучит очень клик-бейтно и плюс еще не очень удачный пример и не совсем правильное и очевидное приминение этого паттерна и особенно в заданном контексте сиутации. Очень рад, что умеете снимать контент и продвигать его, но пригласите, пожалуйста экспертов еще для проверки сценариев. Потому что подача красивая и быстрая, но суть некачественная. А ведь было бы полезно иногда обновлять свои знания какие-то таким образом.
Этим солидам никто уже не следует в России, говнокодеров много. Главное чтобы работало. А те кто спрашивают это на сабесе просто пытаются найти лоха который будет работать за них и кому можно платить в 3 раза меньше. То же касается с тест заданием и лайфкодингом. Мне насрать что чел знает, главное чтобы он сделал то что ему говорят сделать. Пока hr годами ищут и смотрят на текучку, другие тупо берут и дообувают типа. Еще валите оттуда где там вам говорят что будет 2-3 или более сабесов, сразу нахер
Какие "собесы"?! Пришел программист. В каких проектах вы принимали участие, в каких фирмах? Запрограммируйте вот эту задачу за 15 минут. Кто будет экзаменовать программиста по знанию языка программирования? Только с дуба рухнувший!😂 А если экзаменуют, бежать из такого дурдома без оглядки.😅
@ГеннадийШушпанов-д1ч Возможно. Однако пресловутые тесты IQ не случайно имеют ограничение по времени выполнения. Решение задач за деньги должно быть производительным. )) В программировании, которое теперь предпочитают называть "написанием кода", подчеркивая этим банальность этого занятия и отсутствие в нем таорческого начала, приобретает едва ли не главенствующее значение производительность. Прошли времена "суперпрограммистов", серенький руководитель предпочитает иметь дело с программистами того же оттенка, главное, чтобы они работали вместе и укладывались в поставленные им сроки. Есть мнение, что с появлением ИИ этот процесс станет еше более рутинным. Много также говорится об индийских программистах, которые пишут удивительно быстро. По этому скорость "кодирования" сейчас становится для работодателя важным показателем профессионализма програмииста. И тест на время, при всей его пошлости, имеет определенный смысл.
Отлично! Давай продолжать разбирать паттерны в таком же формате!
Круто 👍 Спасибо тебе, Влад, за контент. И всё таки, выпуск про Redis ждём)
Браво! Как у тебя не заканчиваются идеи для видео? Git, docker, kafka, микросервисы - все, на мой взгляд, очень понятно и не совсем для зеленых. Сейчас еще и паттерны подъехали. А самое клевое то, что почти все это не привязано к языку. Мне вот, как с++ разработчику, очень приятно. Спасибо!
А что ещё можно разобрать? Помимо всего вышеперечисленного?
Что ещё существует такое, не привязанное к языку, но желательное к ознакомлению каждым программистом?
@@RaptorT1V agile, system design, алгоритмы и структуры данных, те же паттерны, гит, докер, но глубже. Так еще многопоточное программирование, grpc, rest, websocket. Это то, что за 2 минуты в голову пришло
@@ozimandias1858 а почему именно все про Agile говорят, а не про Waterfall или RAD или Incremental and Iterative model? Это же из области программной инженерии, я правильно понимаю? Методологии разработки.
Что за структуры данных?
Что за алгоритмы? Какие-то конкретные, типа Дейкстры или Хаффмана?
Какие именно паттерны?
Что за многопоточное программирование (асинхронное, что ли?) и GRPC, REST, Websocket?
И можно, пожалуйста, ещё примеров? Себе хочу записать, чтобы изучить.
@@RaptorT1V если честно, звучит как троллинг ;-)
Для меня agile, потому что большинство компаний по этой методологии работают. А вообще да, можно со многими ознакомиться, понять, в чем разница и т.п.
Структуры данных, как и алгоритмы - все с литкода чисто для собеседований.
Паттерны - стратегия, билдер, фабрика, абстрактный метод, например.
Остальное гуглится.
А будут видео именно про объяснение разных паттернов? Было бы круто))
Я тоже хочу больше такого контента!
Например GRASP, SOLID
Я об порождающих, структурных и поведенческих)
@@kvaselaпро solid есть видео. Всё четко на примерах разобрано.
@@kvasela SOLID это принципы, а не паттерны.
Ложка дегтя :) При использовании паттерна наблюдатель помните, что вы лишь скрываете связи между объектами, а не устраняете их. То, что ранее присутствовало в коде, теперь должно хранится в вашей голове или, что нечасто, в документации.
Подскажите пожалуйста , а как наблюдатели дружно запрыгивают в list класса PostSaver?? Им же надо там откуда-то взяться ...
Я совсем не спец, но тоже подумал что зря он не объяснил этот момент. По логике, наблюдатель должен подписаться на события, т.е. в публикаторе нужен метод, который добавит наблюдателя в лист.
либо при инициализации приложения всех обсерверов цепляешь, либо можно это динамически через метод класса добавлять-убирать
DI контейнер. Реализация паттерна Inversion of control
@@KhodorisfulТ.е. все наблюдатели у нас бины и они при инициализации листа прыгают в лист ?? Ну тогда это надо в конструкторе класса конкретно прописать каждое добавление экземплярами класса?? Да ещё и тип загрузки прописать как @lazy у каждого компонента ?? А то машина насоздает бинов и запутается в них (((
@@dimaskusidze подключите rx и не мучайтесь и генерацией 100500 классов ради 2+2. В ООП самое плохое что может быть это наследование и создание классов ради создания классов. Этот код их 100 тыс классов ни кто не сможет ни читать и не понимать. В rx есть и observer и map и filter и управление потоками. Причем это все работает ОДИНАКОГО на всех языках. В том же rxjs все тоже самое. Обсервер создается знаком доллара и это очень легко писать и понимать БЕЗ единого класса
я почему-то сначала думал, что он говорит про синглтон, я думал, что именно он самый популярный паттерн
Чаще всего это самый популярный антипаттерн)
самый нерекомендуемый))
Да, самый полуполярный среди тех, кто второй раз слышит слово "паттерн"
паттерн классный, но лучше уже сразу рассказать про архитетурное решение EDA - event driven development, но уже есть видео про кафку, где это подробро рассказано. Кстати eda и в монолите работает отлично.
Я наконец понял, как называлось то, что часто применял в своих проектах, но не знал, что у этого есть отдельное название)
Можно где то ваши проекты скачать или посмотреть в интернете?😂
@@alexgavril385 ты что это секретные пет проекты под NDA
@@alexgavril385 можно
Спасибо за видео. Хотя с первого раза не совсем понял. Но у меня и с ООП не оч хорошо, т.к. пока не требуется нигде - всё на процедурном...
Супер объяснение! И графика оболденная!!! Спасибо за видео большое!
Жду других патернов!!! Можно было бы целый плей лист! Еще раз спасибо!
Второй вариант паблишить через ивенты спринга и вешать листенеры в каждой новой фиче. Но этот вариант более понятен для восприятия
Красава, Влад, я сразу очень уместно применил его на своем проекте. Был сервис, который при создании сущности делал 3 доп. действия. Прошу продолжать рассказывать нам про подобные фишки
Супер! 70% ролика - объясняет саму суть для опытного флаттерфовщика!
Бомба! Реально увлекательно! Спасибо за видос!
В начале (5:20) вы указали, что выполняемые действия могут зависеть друг от друга. Но до конца видео так и не указали на решение этой проблемы. Как раз наоборот - Наблюдатели ничего не знают (не должны знать) о других наблюдателях, ровно как и порядок "наблюдения" никак не регламентируется.
Также в видео не указано, как организовать "подписку" на событие. Вы утверждаете, что мы исходный класс не правим. Но это не совсем верно - мы же должны добавить нового Наблюдателя в нашу коллекцию наблюдателей.
Если работать через авинжект спринга например, то это произойдёт автоматически
@АлексейСытник-э9т если что-то происходит автоматически - это все равно происходит. Я к тому, что изменение в исходный класс (регистратор) все равно нужно вносить. Не важно, вручную или автоматически
Не знаю говорил ли ты или нет, но можешь рассказать про свои первые задачи на первой работе, или может расскажешь какие задачи дают совсем новичкам (не стажерам, а работягам) в вашей конторе.
Не хватило только о том как эти обсерверы перечислять и передавать в класс. А так все классно и наглядно рассказано 👍
Привет. Спасибо за информацию. Но думаю, что у тебя неточность в схеме про публикатор. Он же записывает информацию в БД, а не отправляет ее напрямую слушателям, слушатели подписываются на события, т.е. делают запросы к базе. Это так?
Спасибо за видео, Влад!
Как обычно с радостью посмотрел.
Если я правильно понимаю, следуя принципам solid, ты как раз будешь придерживаться паттерна наблюдатель?
Почему вы указали на 5:54 минуте последовательность: Событие + Публикатор + Наблюдатель ?
Это ошибка или я что-то упустила?
Очень доступным языком объяснил. Круто!🔥
ваще, крутой видос
Zdravstvuyte. Skolko stoit kurs Spring ?
Привет, отдельного курса по Spring у нас нет, работа с этим фреймворком является частью программы интенсивного обучения - Java Буткемпа, где за 4 месяца ты изучаешь все ключевые инструменты и технологии, которые необходимы разработчику, чтобы получить работу!
А также 3 октября в 19:00 по мск состоится вебинар - лекция “Основы Spring для начинающих Java Junior”, где разберем основы его работы, заходи по ссылке в шапке профиля!
Влад, спасибо огромное тебе за твой труд!
Хотелось бы узнать, как и можно ли вообще устроиться на работу программистом в Европу если не было карьерного опыта?
Буду благодарен за ответ
Добрый день, меня интересует один вопрос на каком устройстве или операционной системе проще работать, виндовс или иос макбук или какой-нибудь Леонова йога 9 вопрос не в деньгах, а в удобстве может совместимости программ, хочется начать заниматься программированием?
Смотря на чем программировать. Если нет прямой необходимости в винде (как в .net и т.п.), то ни в коем случае ее не использовать. Макбук хорош (качество железа на высоте, все эргономично и удобно), на линухе во всех остальных случаях
@@b33blebroxа чем винда плоха?
Очень круто) но как нам после создания нового наблюдателя добавить его в лист наблюдателей PostSaver?
Если речь о Spring, то есть такое понятие как "Внедрение зависимостей". Spring сам создаст список всех наблюдателей.
ага, этот момент не расскрыт
Понравилось! Рассказывай еще про паттерны)
Так то да, классно! Вот только проблема есть, если у нас шина для сообщений нормально не сделана, то сиди и пытайся понять - кому что улетело и почему там что-то выстрелило. Сложность нельзя просто замести под коврик, ее можно перенести в другое место, но это, скорее всего, вызовет накладные расходы. Так что в реальной реальности все немного сложнее.
Огонь! Очень полезное и понятное видео, спасибо!
Нужно бооольше таких разборов разных паттернов))
Если не сложно, хорошо бы еще сразу давать English-вариант всех названий ( а то иногда сомневаешься в переводе- то ли имелся в виду observer, то ли listener ).
Отличное видео! Всё понятно. Поймал себя на мысли, что никогда так захватывающе не смог бы объяснять паттерны программирования😁
Классно!
Влад, привет! Лекцию можно будет посмотреть в записи? Только сегодня увидел твоё видео, а лекция была вчера 😢
Привет, 3 октября проводим повтор, залетай по ссылке в описании, успеешь!
@@fakng-engineer отлично, спасибо!
Непонятно для других языков. Будет ли считаться "наблюдателем" если класс или микросервис создает посты, другой микросервис или класс мониторит появление новых постов в БД и шлет уведомления и т.д.?
Спасибо , интересный урок . Возможно ты сделаешь еще видео про другие паттерны
Если телеграммом не пользуюсь, то зарегистрироваться не получится? Печально.
Вообще мне нужно не сайт сделать, а сервер для Unity приложения (хранение данных по игрокам, регистрация всяких операций типа купил/продал/сделал) соответственно база данных и какой-то апи для взаимодействия из Unity.
Зарегистрироваться получится, в телеграме общение и всякие приятные бонусы, но все необходимые ссылки дублируются на почту
Влад, спасибо! Хорошее объяснение. Даже я понял:)
Добрый день, Вы не подскажите курсы программирования для самых нулей?
Skillfactory отличная школа для изучения базы в программировании, я училась на графического дизайнера с нуля, до этого была экономистом и работаю по новой специальности, хочу пойти на бэкендера опять же в скиллфэктори тк опыт работы с ребятами разработчиками во время обучения мне был комфортен
Могу тоже сказать про sf, потому что они очень хорошие дают материал, и даже если нет никакого опыта помогут, объяснят и направят в нужном направлении изучения и закрепления материала))
Добрый день, меня интересует один вопрос на каком устройстве или операционной системе проще работать, виндовс или иос макбук или какой-нибудь Леонова йога 9 вопрос не в деньгах, а в удобстве может совместимости программ, хочется начать заниматься программированием?
@@Stalker-b7m главное не macos, Линукс лучше всего, а если с ним не дружите, лучше винда на неё много что можно поставить, на крайняк можно через виртуалку запустить Линукс для единичных случаев
Объяснение и анимации топ. Очень хочется видео и про другие паттерны)
БЕСПЛАТНЫЙ ВЕБ “Основы Spring для начинающих Java Junior” 24.09.24 в 19:00 по МСК! Регистрируйтесь по ссылке: www.faang.school/vebinar-spring?
События играют мегаклассно в Event driven архитектуре) там ты паблишера и консумеров можешь разносить аж в разные микросервисы)
Событие кладется в брокера сообщений, и далее его получают все, кто подписан на данное событие. ВААААУУУУУ
Влад, спасибо за объяснение! Ты крутой 🔥
супер объяснение! запишите еще такие же видео про другие паттерны, пожалуйста
Круто. На самом деле прикольно будет узнать это на практисе. Жаль что я не Java, но и на шарпе интересно)
Одно и тоже
Уж шарпист-то java, и наоборот, может читать как никто другой.
Я чуть чаем не подавился когда в конце таки сказал что ты шарпист :D ахах, тролль 80го уровня
суть паттернов и причины применений везде одинаковые, будь то шапы, джава, пыха, питон...
Годнота, практически никогда не ставлю лайк и не подписуюсь, а тут парень просто заслужил! Уважение и благодарность!
Классно было бы еще рассказать об системном и бизнес аналике,их работу,основы,принципы,от лица бэкэнд разраба
у нас на работе аналитики это кривые дауны, которые нихрена не в чем не шарят, убери их и почти ничего не изменится, это банк если что
Зарегистрироваться на вебинар невозможно, форма внизу не отображается, только призыв написан.
Попробуй включить впн, или отключить ADblock в браузере, должно помочь
прекрасный ролик - ставлю класс!)
А вообще, можно создать такой класс наблюдатель, который имеет метод запуска, который на вход получает, не только объект события, но тип события.
И после этого можно вообще в основной клас не заходить, а просто добавлять модули :)
Прилижение с подгружаемыми модулями :)
Я вот сейчас тоже подумал, что в этом примере не рационально, что продюсер отправляет событие всем наблюдателям в списке.. Лучше отправить одно событие в некий сортировщик который сам решит по типу события что с ним делать и какому наблюдателю отправить.
@@PavelNebo на один и тот же тип события может быть куча разных получателей, каждый из которых обрабатывает его по своему. Эта концепция например широко используется в кафке - на один и тот же топик может быть создано куча консьюмер групп, обрабатывающие одни и те же события по своему, независимо друг от друга.
@@TimLaizaR228 ну я это и описал. Отдельный клас который занимается распределением событий по нужным получателям, а продюсер отправляет одно событие в этот класс
@@PavelNebo вы придумали кафку и систему очередей в целом))
Подача отличная. Если бы смотрел такое впервые, то зашло бы.
Теперь понял почему старое железо тормозит. Из за сотен наблюдателей.
на самом деле самый популярный паттерн - это стратегия, где-то даже исследование было) и ты как раз его реализовал на самом деле
обсервер должен подписываться, на обсерваблы, которые генерируют нотификации, у тебя же прямая передача в потребителя
не может фича сама по себе подписаться на сохранение поста, ты в классе сохранения сам добавляешь фичу
По GOF, subject хранит в себе наблюдателей и уведомляет их при наступлении события (метода Notify) с передачей этого события, также в самом наблюдателе может хранится ссылка на наблюдаемый объект (subject), чтобы тот при уведомлении сам мог запрашивать необходимую информацию. Посмотрите книжку там все понятно описано
Один из моих любимых шаблонов - часто его использую. Еще есть стратегия, тоже круто паттерн
Полезная фитча такого паттерна - отмена события..
Если один из наблюдателей проверив условия не одобрил дальнейшие действия с данным обьектом - все остальные будут в курсе и так же пропустят мимо обработки.
топ видео! а как ты делаешь такие крутые анимации ?
"Отдельными компонентами программы являются классы и объекты"? Vlad, ты уверен что хорошо сформулировал свою мысль? Класс - это design-time (если речь не идет про static class - там есть ньюансы), а объект - это run-time.
Слушай друг, откуда у тебя столько времени на все это ?
Владик, ты топчик! спасибо!
Мишустин Влад, ты молодец, отлично сделал
Какой паттерн будет собирать всех наблюдателей в один список?
четко расскзал, про паттерн "посетитель" (visitor) расскажи так же
+ За паттерны, у тебя хорошо получается)
Патерны-матерны это хорошо.
Но было бы в 💯 раз полезно, если бы вы сделали хотя бы 5 приложений с объяснением🎉
А то на одной "воде" далеко не уедешь ❤
Я знаю где не спросят о нем - на разработчика с использованием библиотеки Qt, ведь она основывается на нем
Получается, что PostSaver занимается больше чем одной задачей. Его код постоянно необходимо править , добавляя новых наблюдателей да и еще код их вызова циклического постоянно будет во всех подобных классах с наблюдателями. А если потом окажется что не про все посты нужно отправлять уведомление? По-моему логика оповещения должна быть вынесена на уровень выше, где вызывается сам PostSaver.
Автор видео не понял как работает этот паттерн. Да и вы тоже.
Если окажется, что уведомления нужно отправлять не на все посты, то одписчик отправляющий уведомления сам может решить это на основе информации из события.
Как я написал ниже в своём коментарии - PostSaver это по сути модель, если брать архитектуру MVC. Модель ничего не должна знать о подписчиках (вот эти все классы уведомлений, рекламы, статистики). Она должна знать всего об одном классе - классе Наблюдателя. Одного. И после сохранения поста бросать событие в этот Наблюдатель, вы зывая его метод accept(event). А уже Наблюдатель знает кто подписан на принимаемый им тип событий и он отправляет это событие обработчикам (классам работы с уведомнениями, рекламой, статистикой). Таким образом у нас получается чистая модель, код которой мы больше не трогаем.
Это позволяет использовать её в других местах, для кототых, например, вот эти все уведомления, статистика, реклама не нужны.
А также эта моель легко покрывается тестами, потому что не содержит в себе лишних классов.
На счёт вынести логику оповещения выше. В целом, да, она обычно вынесена выше. Но это реализовано не вынесением её туда, откуда вызывается этот PostSaver, а вызовом её в событиях модели. Но там реализован такой же паттерн Наблюдатель. Поэтому в контексте обучающего видео, эти вещи приплетатть сюда не стоит, чтобы не усложнять понимание сути паттерна. Т.к. это уже касается не паттерна как такогвого, а конкретной реализации.
@@testdeim Инжектим PostObserver где прописана логика оповещение что кому и при каких условиях. В PostSaver мы только один раз вызываем PostObserver и передаем туда актуальный объект Post. Это годится если в самом Post есть вся необходимая информация для того чтобы решить уведомлять или нет. Но что если отправка будет зависеть от каких либо других факторов, о которых нет информации в Post? Прокидывать какой то "notify=false" флаг?
@@Khodorisful тут либо в ивент добавляем нужную информацию (не обязательно же в ивент кидать весь объект Post и/или только его). Тоесть собираем ивент со всеми нужными данными (хоть весь Post, хоть его часть, хоть ещё чо то кроме него, да хоть бы и тот же notify=false). Но notify=false можно в том случае, если PostSaver обладает информацией о том делать ли уведомление. Но обычно не обладает и не должен. Эту информацию знает (или должен узнавать) непосредственно сам обрабочик события. Если брать в пример уведомления, то класс отправляющий уведомления, принимает событие с постом, понимает из него какого типа этот пост, делает запрос в хранилище пользователей у которых настройка "получать уведомления" и им отправляет эти уведомления. Ни сам PostSaver, ни Наблюдатель ничего знать не знают об уведомлениях и не должны.
чувак, инфа огонь, мерси!
Классное видео, спасибо
Но ведь наблюдатель добавления рекламы в пост должен менять сам пост, поэтому он должен выполниться самым первым, а это уже декоратор какой-то
если он меняет сам пост, а не просто реагирует на него, то это не обсервер :) Это происходит на этапе создания и сохранения поста, то есть до того как мы создаем событие
а не кажется что пример вредный? потому что а как обработать кейс когда после сохранения в базу вызов прерывается?
Транзакцией ACID...
@@fakng-engineer ну так у тебя сохранение в бд, потом вызов n действий не связанных с бд, что если на каком-то что-то пойдёт не так? т.е. в итоге данные не сохранятся, а какое-то количество чего-то куда-то улетит. я без претензий, просто они же копипастить будут и в итоге в тысячах контор будет гнкод.. а это издержки.
@@Сергей-у3к8й так у тебя если на моменте сохранения в базу произошел ролбэк, то ты цепочку событий даже не запустишь
@@Сергей-у3к8й То есть ты хочешь сказать что ты хочешь откатить создание поста от того что у какому-то юзеру не прилетело уведомление? :)
@@Сергей-у3к8й в этом случае поможет другой паттерн, называется transactional outbox)
Сурер понятно и полезно!
Я думал, что чамый популярный паттерн - это MVC, да так оно и есть
Это база везде
Жаль что стрима на youtube нет😢
Сингальтон
Я конечно не 7, а всего лишь 6 лет в индустрии. Но меня ни разу ни на одном собеседовании не спрашивали про этот паттерн. Хотя собеседуюсь довольно часто.
Пару раз было такое, что меня спрашивали о том, какие паттерны я знаю и просили рассказать про парочку. Обычно первыми на ум приходили: стратегия, фабрика, синглтон.
+
+
Привет, запиши пожалуйста видео как работать с очередями
Но ведь теперь каждый класс наблюдатель будет получать событие, которое может быть не для него и фильтровать его уже внутри себя. Получается некоторый оверхед производительности
Добрый день. А что если для новой фичи нужны новые данные в эвннте?
Просто допишешь их в PostEvent
Расширяем эвент
@@fakng-engineer а в методе аксепт нельзя их достать?
@@MrRomanvideo, странный вопрос. Эвент в методе accept как раз и разбирается на части. На те части, о которых метод accept знает. Ну а те, о которых не знает, те в данной конкретной фиче и не нужны.
Странный паттерн наблюдатель, по факту он не наблюдает, а его пинают. А весь толк даёт наследование с полиморфизмом.
Сохранение в базу данных лучше сделать в виде наблюдателя, а не хардкодить в методе создания ивента.
Аж кайфанул от подачи...) -> List(Действие). Лайк extends Действие. Подписка extends Действие. Уведомления extends Действие. =)))
класс постов нарушает srp из solid
Разработчик из Амстердама , скажи хватит ли у тебя оперативки на все объекты в твоей «Мега крутой соц сети»? Если бы ты рассказывал это в контексте SOLID принципов, то в целом ок. Но ты суешь это в идее где у тебя будет много событий , а значит у тебя рано или поздно оперативка кончится и привет memoryExeption
Запишет сообщение в брокер сообщений который доставит его получателям на каком угодно количестве серверов. Да и это очень уж нужно постараться чтобы забить память просто инициализацией обьектов)
Этот ролик наглядно демонстрирует отсталость Java от C#. В С# весь этот "паттерн" реализован на уровне самого языка (Events) и доступен разработчикам в готовом виде (да еще и с кучей дополнительных фишек) сразу "из коробки". В Java же нужно писать все самому ручками, со всеми погрешностями и дальнейшей дополнительной поддержкой.
С# сейчас часто применяется в проектах?
@@userxh-sg6cg Смотря в каких проектах. В крупных компаниях для реализации больших сложных проектах - часто!
По-моему, самый популярный - синглтон.
@@ВысоцкийАндрей-г5э согласен :) про синглтон можно упомянуть если уже назвал штук 5 паттернов :) так до кучи
@@ВысоцкийАндрей-г5э Я ж не говорю, что он самый эффектный для собеседования; скорее, наоборот - один из самых тривиальных (=популярных).
@@decimaldelimiter587 вообще синглтон это АНТИпаттерн
круто!!! спасибо!!!
Сохранять пост стоило бы тоже по евенту, и выдавать другое событие
12:40 Это называется Несвязность
Нихрена не понял. Начал с функции, в которую мы напихиваем вызовы других функций, а потом перескочил к событиям. Откуда взялись события, чего ради это должно быть проще спронктировать?
Я прошел только за год 10 собеседований и ни на одном не спросили про паттерн этот. Звучит очень клик-бейтно и плюс еще не очень удачный пример и не совсем правильное и очевидное приминение этого паттерна и особенно в заданном контексте сиутации. Очень рад, что умеете снимать контент и продвигать его, но пригласите, пожалуйста экспертов еще для проверки сценариев. Потому что подача красивая и быстрая, но суть некачественная. А ведь было бы полезно иногда обновлять свои знания какие-то таким образом.
У меня вопрос, разве этот паттерн в таком исполнении, не нарушает принцип подстановки Лисков?
А в чем проблема? В каком месте у вас сомнения?
Спасибо!
В конце видео гоготнул со слова лаконичный)
Самый главный паттерн - это абстрактный метод
Нет чувак!Самый популярный паттерн стратегия.
так и не сказано, что же это за зверь паттерн программмирования
Не знаю, какой у вас самый популярный патерн, а у меня собесах про солид все спрашивают.
Это не паттерн😅
@@ВысоцкийАндрей-г5э , штука у черепахи на спине панцирь, а он говорит о каком то непрерывном потоке слов
Dependency Injection/Inversion?
Этим солидам никто уже не следует в России, говнокодеров много. Главное чтобы работало. А те кто спрашивают это на сабесе просто пытаются найти лоха который будет работать за них и кому можно платить в 3 раза меньше. То же касается с тест заданием и лайфкодингом. Мне насрать что чел знает, главное чтобы он сделал то что ему говорят сделать. Пока hr годами ищут и смотрят на текучку, другие тупо берут и дообувают типа. Еще валите оттуда где там вам говорят что будет 2-3 или более сабесов, сразу нахер
Влад, а на Рутуб не будешь выкладывать?
Какие "собесы"?! Пришел программист. В каких проектах вы принимали участие, в каких фирмах? Запрограммируйте вот эту задачу за 15 минут. Кто будет экзаменовать программиста по знанию языка программирования? Только с дуба рухнувший!😂 А если экзаменуют, бежать из такого дурдома без оглядки.😅
Программирование не любит суеты. Просьба "Запрограммируйте вот эту задачу за 15 минут" такой же повод "бежать из такого дурдома без оглядки".
@ГеннадийШушпанов-д1ч Возможно. Однако пресловутые тесты IQ не случайно имеют ограничение по времени выполнения. Решение задач за деньги должно быть производительным. )) В программировании, которое теперь предпочитают называть "написанием кода", подчеркивая этим банальность этого занятия и отсутствие в нем таорческого начала, приобретает едва ли не главенствующее значение производительность. Прошли времена "суперпрограммистов", серенький руководитель предпочитает иметь дело с программистами того же оттенка, главное, чтобы они работали вместе и укладывались в поставленные им сроки. Есть мнение, что с появлением ИИ этот процесс станет еше более рутинным. Много также говорится об индийских программистах, которые пишут удивительно быстро. По этому скорость "кодирования" сейчас становится для работодателя важным показателем профессионализма програмииста. И тест на время, при всей его пошлости, имеет определенный смысл.