🌍 Привет мир! 👋
🌍 Привет мир! 👋
В связи с высокой нагрузкой 👨💻 не было времени сформировать полноценный пост, хотя и зачатков для этого у меня полным полно.
Подумал ✍️, что же из списка важнее, и пришел к выводу: рассказывать про какую-то технологию, способ применения, новую утилиту и так далее — это конечно здорово и полезно.
Но сейчас всё острее стоит вопрос не просто в том, чтобы писать код быстро (за счёт AI), а в том, чтобы делать это грамотно.
Не было и дня, чтобы я не использовал AI: генерит много, генерит классно, но есть одно НО, нет структуры и приходится постоянно говорить:
“Слушай, всё, что ты написал — это огнище 🔥. Но давай мы сделаем это по принципу или по паттерну…”
После этого код становится гораздо читабельнее. Это я к тому, что бота нужно грамотно направлять, а для этого нужно понимать, что ты хочешь получить и как должна выглядеть структура кода.
Вот недавно я касался паттерна Strategy 🎮 — вот о нём, собственно, и поговорим.
🚀 Мотивация
Паттерны описывают общие решения архитектурных проблем. Прелесть понимания паттернов в том, что абсолютно неважно на каком ЯП вы пишите, паттерны по сути это агностики.
⚙️ Что такое Strategy?
Как бы это понятно описать, для начала нужно понимать что это поведенческий паттерн, а дальше вот небольшой примерчик на пальцах.
Представим что у нас есть игрушечный робот 🎆. Этот робот может передвигаться, и можно менять способ его передвижения:
🟢Ходит пешком
🟢Едет на колёсиках
🟢Летит с пропеллером
Что мы имеем? У робота есть способ двигаться — стратегия и можно менять стратегию передвижения в любой момент, не меняя саму игрушку.
Подумайте, как бы вы реализовывали такой алгоритм поведения? Уверен что многие сразу подумали об этом:
В зависимости от команды которая поступила с пульта, намучу if..else..else, О! или даже не так, сделаю через switch case, потому что и так много if else в коде =)
И действительно ваше решение было бы быстрым и рабочим, как говорится “делай это упражнение несколько раз в день и голова не будет болеть” 😄.
Но давайте уже писать как бородатые дядьки (Мурычу привет)
🚩 Простой примерчик
Представим, что мы пилим приложение, рассчитывающее стоимость 💵 доставки заказа.
У нас может быть несколько вариантов доставки:
🟢Курьерская доставка 🚴♂️,
🟢Почта 📦,
🟢Ракета с байконура 🚀.
Каждый способ имеет одну или несколько задач, в нашем случае необходимо рассчитать 🕯 стоимость доставки. Поэтому для каждого метода доставки пишется отдельный класс ( имплементация может быть и через функциональное программирование, ООП это не панацея )
1️⃣ Создание стратегий:
2️⃣ Далее пишется контекст, который будет выбирать и использовать стратегию:
3️⃣ И остается самый сок это получение стратегии на основании типа:
Я думаю и без слов видна элегантность подхода, но самое классное, завтра, когда придет клиент и скажет 🧐:
“А чо, я еще и по морю хочу, давай пароходы добавим”.
Вы без какого-либа труда внесете новый способ доставки, не изменяя при этом основной файл и не делая случайных багов в старой имплементации.
💬 Делитесь своим мнением в комментариях👇! Если вам понравилась статья, не забудьте поставить лайк и хорошего вам дня! 👍
#PATTERNS
В связи с высокой нагрузкой 👨💻 не было времени сформировать полноценный пост, хотя и зачатков для этого у меня полным полно.
Подумал ✍️, что же из списка важнее, и пришел к выводу: рассказывать про какую-то технологию, способ применения, новую утилиту и так далее — это конечно здорово и полезно.
Но сейчас всё острее стоит вопрос не просто в том, чтобы писать код быстро (за счёт AI), а в том, чтобы делать это грамотно.
Не было и дня, чтобы я не использовал AI: генерит много, генерит классно, но есть одно НО, нет структуры и приходится постоянно говорить:
“Слушай, всё, что ты написал — это огнище 🔥. Но давай мы сделаем это по принципу или по паттерну…”
После этого код становится гораздо читабельнее. Это я к тому, что бота нужно грамотно направлять, а для этого нужно понимать, что ты хочешь получить и как должна выглядеть структура кода.
Вот недавно я касался паттерна Strategy 🎮 — вот о нём, собственно, и поговорим.
🚀 Мотивация
Паттерны описывают общие решения архитектурных проблем. Прелесть понимания паттернов в том, что абсолютно неважно на каком ЯП вы пишите, паттерны по сути это агностики.
⚙️ Что такое Strategy?
Как бы это понятно описать, для начала нужно понимать что это поведенческий паттерн, а дальше вот небольшой примерчик на пальцах.
Представим что у нас есть игрушечный робот 🎆. Этот робот может передвигаться, и можно менять способ его передвижения:
🟢Ходит пешком
🟢Едет на колёсиках
🟢Летит с пропеллером
Что мы имеем? У робота есть способ двигаться — стратегия и можно менять стратегию передвижения в любой момент, не меняя саму игрушку.
Подумайте, как бы вы реализовывали такой алгоритм поведения? Уверен что многие сразу подумали об этом:
В зависимости от команды которая поступила с пульта, намучу if..else..else, О! или даже не так, сделаю через switch case, потому что и так много if else в коде =)
И действительно ваше решение было бы быстрым и рабочим, как говорится “делай это упражнение несколько раз в день и голова не будет болеть” 😄.
Но давайте уже писать как бородатые дядьки (Мурычу привет)
🚩 Простой примерчик
Представим, что мы пилим приложение, рассчитывающее стоимость 💵 доставки заказа.
У нас может быть несколько вариантов доставки:
🟢Курьерская доставка 🚴♂️,
🟢Почта 📦,
🟢Ракета с байконура 🚀.
Каждый способ имеет одну или несколько задач, в нашем случае необходимо рассчитать 🕯 стоимость доставки. Поэтому для каждого метода доставки пишется отдельный класс ( имплементация может быть и через функциональное программирование, ООП это не панацея )
1️⃣ Создание стратегий:
// Стратегии доставки
class CourierDelivery {
calculate(price) {
return price + 5;
}
}
class PostalDelivery {
calculate(price) {
return price + 3;
}
}
class FalconDelivery {
calculate(price) {
return price + 100;
}
}2️⃣ Далее пишется контекст, который будет выбирать и использовать стратегию:
class DeliveryContext {
setStrategy(strategy) {
this.strategy = strategy;
}
calculate(price) {
// Использует выбранную стратегию для расчёта
return this.strategy.calculate(price);
}
}3️⃣ И остается самый сок это получение стратегии на основании типа:
const delivery = new DeliveryContext();
// Dictionary стратегий
const strategies = {
express: new FalconDelivery(),
postal: new PostalDelivery(),
courier: new CourierDelivery(),
};
// Выбор стратегии по типу заказа
const selectedStrategy = strategies[orderType] || strategies.courier;
delivery.setStrategy(selectedStrategy);
// Расчёт финальной стоимости заказа с учётом выбранной стратегии
const finalPrice = delivery.calculate(orderPrice);Я думаю и без слов видна элегантность подхода, но самое классное, завтра, когда придет клиент и скажет 🧐:
“А чо, я еще и по морю хочу, давай пароходы добавим”.
Вы без какого-либа труда внесете новый способ доставки, не изменяя при этом основной файл и не делая случайных багов в старой имплементации.
💬 Делитесь своим мнением в комментариях👇! Если вам понравилась статья, не забудьте поставить лайк и хорошего вам дня! 👍
#PATTERNS

Хотите больше таких постов?
Подпишитесь на канал и читайте продолжение в Telegram.