Спасибо ! Очень круто. Хотелось бы еще узнать паттернов с использованием spring. Хотя больше реально похоже на стратегию
@channel-yg2xc6 ай бұрын
Видео хорошее, но паттерн, который ты показываешь, называется strategy. Command - это когда у тебя есть шаблонная логика в рамках некоторого класса, и метод вызова этой логики принимает в качестве аргумента command-класс, обобщенный некоторой абстракцией(интерфейс, базовый класс), содержащий метод, который вызывается в классе с шаблонной логикой. И, как по мне, смысла от command в рамках java + Spring приложении нет, если есть возможность использовать template method. А возможность есть всегда :)
@John.Constantine.7775 ай бұрын
Сдается мне, что паттерн команда - это поведенческий паттерн проектирования, который превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать (вести журнал запросов) их, а также поддерживать отмену операций. Главное в нем это инкапсуляция методов в объекты, их хранение и возможность отмены. А этот паттерн называется не Стратегия, а Состояние, потому как объект, определяющий поведение основного класса содержится в полях этого класса
@channel-yg2xc5 ай бұрын
@@John.Constantine.777 , это если следовать строгому определению. Вопрос скорее в том, может ли Command быть без т.н. операции undo, и обязательно ли она должна содержать состояние. Проще говоря, если вместо класса, имплементитующего некоторый общий интерфейс(ICommand), передавать в метод простой Runnable, в котором через замыкание будет прописана логика, скажем, отправки события в шину сообщений, можно ли это считать Командой? Более того, следовать классическому примеру реализации шаблона Command, на мой взгляд, возможно не всегда: в случае, когда команда отправляет событие в шину сообщений(условный RabbitMQ), применить операцию undo возможности нет. На мой взгляд, в большинстве случаев Command как раз стоит использовать в виде функциональных интерфейсов(анонимных классов), не имющих состояние, а если состояние всё же есть, и команда предполагает нетривиальную и объёмную логику - я бы подумал о Template Method или в некоторых специфических кейсах Bridge, т.к. в случае дальнейшего развития фичи эта команда вряд ли влезет в один метод. Что касается Strategy и State, мне кажется, что пример на видео - это классическая Strategy с использованием механизма dependency injection. Здесь основной момент в том, что у нас есть общий интерфейс для компонентов, предполагающих разное поведение(классический полиморфизм), а "состояние" у нас, во-первых, статическое, неизменяемое, что уже, как мне кажется, противоречит шаблону State, а во-вторых, оно нужно только для того, чтобы положить компонент в ассоциативный массив: мы вполне могли бы обойтись без "инкапсуляции" т.н. "состояния" внутри компонента, положив в хеш-таблицу значения явно указывая компоненты, а не через stream api. Правда, тогда пришлось бы инжектить каждый бин отдельно.
@KotlinBack27 күн бұрын
Даже больше на медиатор похож
@user-iu6yz6ck6h2 жыл бұрын
Мне вообще понравилось! Спасибо
@ruff7209 Жыл бұрын
ппц ты умный, Спасибо за видос!
@TheLordGamesTv2 жыл бұрын
👍
@for_whom_the_bell_tolls2 жыл бұрын
Отличный наглядный пример! Правда это наверно скорее Стратегия, а не Комманд, хотя прям утверждать не стану, надо самому чекнуть, всегда их путал))
@javistt2 жыл бұрын
Благодарю. Когда уже смонтировал ролик, тоже подумал, что это скорее стратегия.
@valer0chka1892 жыл бұрын
Чисто моё мнение, но тут не полностью отображен смысл этого паттерна, я считаю что здесь больше про простой полиморфизм)