highloadmicro | Unsorted

Telegram-канал highloadmicro - Pattern Guru. Шаблоны проектирования. Архитектура ПО

2672

Патерны программирования. Архитектура ПО. Микросервисы @anothertechrock

Subscribe to a channel

Pattern Guru. Шаблоны проектирования. Архитектура ПО

🚩 Шаблон проектирования Приспособленец (Легковес)

🟣 Подробное описание паттерна

Приспособленец (англ. Flyweight) — структурный паттерн проктирования. Он позволяет вместить большее количество объектов в отведенную оперативную память.

Основная идея паттерна — различие между внутренним и внешним состоянием объекта. Внешнее состояние передается клиентом, использующим приспособленца, в некотором контексте. Внутреннее состояние хранится непосредственно в приспособленце и позволяет разделять их. Под разделением понимается возможность одновременной работы нескольких клиентов с одним и тем же приспособленцем.

🗂 Код на Python

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

Вопрос с собеседования

Что такое Dependency inversion principle?

Ответ опубликуем завтра, а пока пишите свои варианты в комментариях!

#interview

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

Kubernetes Patterns

Автор:
Bilgin Ibryam
Год издания: 2023

#en

Скачать книгу

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

🔥 Топ-9 паттернов для обмена данными и взаимодействия между компонентами/сервисами в распределенных системах

🔹 Peer-to-Peer
🔹 API Gateway
🔹 Pub-Sub
🔹 Request-Response
🔹 Event Sourcing
🔹 ETL
🔹 Batching
🔹 Streaming Processing
🔹 Orchestration

👉 Источник

#инфографика

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

NAITION AI: Спрос на разработку с ИИ-агентами вырос в сотни раз за год. Свежий Stanford AI Index 2026 показал, что навык AI Agents стал №1 среди самых востребованных инженерных скиллов.

• Упоминания «Agentic systems» в вакансиях за год выросли на 10854% (!) — это не опечатка.
• «AI agents» — +2113%.
• Вывод простой: компаниям массово нужны не «написатели кода», а архитекторы мультиагентных систем.Главный скилл в 2026 году — строить долгоживущие автономные процессы, управлять контекстом и верифицировать работу десятков агентов.


Рынок можно догнать!
Naition запускает новый, обновленный в июле поток буткемпа по AI-driven разработке уже 21 июля.

Максимум пользы получат middle+ разработчики и команды, нацеленные на апгрейд производительности инженерного процесса.
IT-специалисты других профессий тоже могут себя попробовать.

За 12 недель вы встроите ИИ во все процессы:
• Соберёте своё ядро — MCP под задачи, RAG, мультиагентную систему с сабагентами и оркестрацией.
• Внедрите агентов в кодовые базы на 100К+ строк — автоматизируете индексацию кода, рефакторинг и изменение архитектуры.
• Научитесь масштабировать AI-практики на всю команду.
Ведут практики с 15-20 годами опыта: ex-Yandex Cloud, staff-инженер Google, CEO Symbioway (центр по найму разработчиков) — люди из эпицентра трансформации рынка.


Формат: 17 уроков, 5 модулей, живые вечерние эфиры + практика между ними. Минимум теории, максимум разборов кейсов и групповой практики прямо на вебинаре.

👉 Забронировать место — naition.ai
А по промокоду PATTERNGURU для подписчиков — скидка 20% до 20 июля.

Что ещё стоит знать:
• Приведёте друга или коллегу — вы вместе получите доп. скидку 10% сверху (в сумме 30%).
• Можно оплатить частями, а начать даже с одного модуля.
• Если вы бизнес, можно прокачать всю команду разом.

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

🕯 Паттерн Proxy (Прокси)

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

Использование:

🔹 Когда необходимо контролировать доступ к ресурсоемким объектам или операциям.
🔹 Для добавления дополнительной функциональности без изменения исходного объекта.

Преимущества:

1️⃣ Позволяет контролировать доступ к реальному объекту, например, для ленивой инициализации или кэширования. Это может улучшить производительность, так как ресурсоемкие объекты создаются только тогда, когда они действительно нужны.

2️⃣ Позволяет контролировать доступ к объектам, добавляя проверки перед вызовом методов. Это полезно для управления доступом в сетевых приложениях или для защиты данных.

3️⃣ Позволяет оптимизировать работу с удаленными объектами, минимизируя количество вызовов или обрабатывая их асинхронно. Это снижает нагрузку на систему и повышает скорость работы приложения.

4️⃣ Может использоваться для логирования или отслеживания вызовов методов реального объекта, не внося изменений в сам объект. Это упрощает мониторинг и отладку системы.

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

⁠Шаблоны проектирования простым языком

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

Порождающие: https://tprg.ru/patterns-1
Структурные: https://tprg.ru/patterns-2
Поведенческие: https://tprg.ru/patterns-3

#паттерны

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

🔥24 июня в 20.00 мск. приглашаем на открытый урок: "Отказоустойчивый и высоко-доступный кластер RabbitMQ"

На вебинаре разберём практические подходы к созданию отказоустойчивой и высоко-доступной очереди сообщений для высоконагруженных систем.

📌 Что будет:
— Запуск и настройка кластера: Quorum Queues и Mirrored Queues (синхронная репликация)
— Синхронизация очередей и обеспечение согласованности
— Dead Letter Queue + правильные настройки durability
— Гарантии доставки для Producer: баланс между надёжностью и производительностью
— Asynchronous cluster-to-cluster message routing: Exchange Federation и Shovels

🎯 После вебинара вы сможете:
— Самостоятельно развернуть отказоустойчивый кластер RabbitMQ
— Настраивать Quorum Queues и Mirrored Queues под разные сценарии
— Правильно работать с Dead Letter Queues и гарантиями доставки
— Организовывать межкластерное взаимодействие сообщений
— Проектировать надёжные асинхронные коммуникации в микросервисной архитектуре

👉 Регистрация открыта: https://vk.cc/cYRBlr

Вебинар приурочен к старту курса «Высоконагруженные системы: архитектура и масштабирование».

🎁При покупке курса вы получите в подарок мини-курс по Kafka, который поможет подготовиться к собеседованию в бигтех

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

Лидеры по работе с данными и ИИ из Альфа-Банка, Сбера, X5 Tech, Т-Банка, Ozon Fintech, Банка России, Дикси, Ситидрайва, Lamoda, Черкизово и других компаний расскажут, как данные и искусственный интеллект помогают ускорять бизнес в финтехе, ритейле, промышленности, транспорте и агросекторе.

9 июля на форуме Data Day 2026:

💰 Тренды AI и данных «из первых уст». На какие технологии и подходы делают ставку лидеры рынка?

💰 Как превратить хаос данных в надежный бизнес-навигатор и сделать данные стратегическим активом компании.

💰 Практика внедрения AI и data-driven подходов в финтехе, ритейле, логистике, промышленности и агросекторе.

💰 Как находить новые точки роста, используя опыт цифровых лидеров и сильные data-команды.

💰 AI-hub: выставка и центр экспертизы готовых AI-решений и автономных агентов для бизнеса.

Выступают:

– Руслан Булатов, Банк России. Директор Департамента финансовых технологий.
– Дмитрий Криволапов, Lamoda. Директор департамента по данным и аналитике.
– Алексей Бондаренко, Газпромбанк. Вице-президент — начальник департамента управления данными.
– Дмитрий Рузанов, Альфа-Банк. Директор департамента разработки моделей.
– Павел Денисенко, X5 Tech. Директор департамента развития платформы больших данных.
– Артём Летин, ВТБ. Начальник управления моделирования КИБ и СМБ, вице-президент.
– Валерий Поляков, Т-Банк. Лидер по данным группы Т-Технологии (Chief Data Officer).
– Александр Лукьянов, ДОМ РФ Технологии. Генеральный директор.
– Валентина Рудик, Ozon Fintech. Руководитель розничного кредитования.
– Андрей Скачёк, М.Видео, Директор по маркетингу

И другие.

Вас ждет самый масштабный Data Day:
🔥 5 отраслевых треков (Финтех, Агропром, Путешествия и Транспорт, Ритейл, Персональная эффективность)
🔥 1500+ участников
🔥 60+ спикеров

9 июля, «Бизнес. Техноград», ВДНХ, Москва.

Присоединяйтесь! Форум соберет экспертов по данным и AI из банков, ритейла, телекома, транспорта, агропрома, ИТ-компаний и индустриальных лидеров.

👉 Программа и регистрация

Реклама. ООО «Регламент». ИНН 7708323273. erid:2W5zFJJ3D6q

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

6 полезных шаблонов проектирования

🚩 Шаблон проектирования Singleton

🚩 Шаблон проектирования Итератор

🚩 Шаблон проектирования Декоратор

🚩 Шаблон проектирования Фасад

🚩 Шаблон проектирования Адаптер

🚩 Шаблон проектирования Абстрактная фабрика

#полезное

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

Это точно поможет тебе в проектировании API

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

— 6 самых популярных стилей архитектуры API: которые вам нужно знать (с плюсами, минусами и примерами использования)

— Проектирование REST API: спорные вопросы с проектов и собеседований на системного аналитика (и не только)

— Руководство по проектированию сетевых API от Google: Его использовали внутри компании с 2014 года, и оно служит основой при разработке облачных и других API.

— Книга «Паттерны проектирования API: Сотрудник того же Google Джей Гивакс рассказывает о том, как в компании создают масштабируемые и гибкие сервисы. Вы узнаете, как улучшить дизайн самых распространённых API и как действовать в сложных пограничных случаях. Сопровождается иллюстрациями и примеры кода.

С вас лойс 👍

#api

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

🔥 Приглашаем на бесплатный открытый вебинар курса «Высоконагруженные системы: архитектура и масштабирование»:

«Polyglot Persistence: как современные системы живут с десятками баз данных»

🗓 Когда: 2 июня, 20:00 (мск)

Одной базы данных уже давно недостаточно. Современные высоконагруженные системы — это сложная экосистема из разных хранилищ, каждое из которых решает свою задачу.

На вебинаре разберём, как грамотно сочетать PostgreSQL, ClickHouse, Redis, Kafka и Elasticsearch, чтобы система оставалась быстрой, согласованной и отказоустойчивой.

Что будет на вебинаре:
— Принципы Polyglot Persistence и роль каждой базы в современной архитектуре
— Как связать PostgreSQL, ClickHouse, Redis и Kafka без потери согласованности данных
— Event-driven подход, CDC и Outbox-паттерн в высоконагруженных системах
— Архитектурные приёмы построения надёжных data-платформ, способных выдерживать миллионы операций

Кому будет полезно:
— Backend-разработчикам, желающим понимать устройство современных систем
— Архитекторам и DevOps-инженерам, решающим задачи масштабирования и согласованности
— Всем, кто работает с большими данными и хочет эффективно комбинировать разные типы хранилищ

👉 Зарегистрироваться: https://vk.cc/cYdHaS

Бесплатное занятие приурочено к курсу «Highload Architect», на котором вы научитесь проектировать сложные высоконагруженные системы, грамотно выбирать и сочетать технологии хранения и обработки данных.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

🔥Приглашаем на бесплатный урок курса «Архитектор программного обеспечения»:
«API Gateway и не только: шаги к идеальной архитектуре внешних API»

🎓Мы разберём продуманную архитектуру внешних API: какие проблемы возникают при их проектировании, как API Gateway помогает их решать и какие паттерны стоит применять, чтобы сделать взаимодействие с системой удобным, безопасным и масштабируемым.

📚Вопросы вебинара:

- Сложности проектирования API
- Нестабильные каналы, перегрузка, вопросы безопасности и производительности
- Зачем нужен API Gateway
- Проектирование
- Популярные решения и подходы
- Агрегация, адаптация и переиспользование API
- Антипаттерны и типичные ошибки

👉 Регистрация https://otus.pw/szNj/

Реклама ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

Паттерн Singletone с примером на JavaScript

Несмотря на то что в последнее время все больше задач мы обычно решаем в функциональном стиле я хотел бы сегодня вам рассказать о одном из самых распространенных классовых паттернов - синглтон.

И так что это:
Паттерн Singleton означает создание только одного экземпляра класса и доступ к нему через методы-геттеры.

Пример использования:

class Singleton {
 constructor() {
  if (!Singleton.instance) {
   Singleton.instance = this;
  }
  return Singleton.instance;
 }

 someMethod() {
  console.log('Hello from Singleton!');
 }
}

const instance1 = new Singleton();
const instance2 = new Singleton();

instance1.someMethod(); // "Hello from Singleton!"
console.log(instance1 === instance2); // true

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

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

#паттерны

Введение

Сегодня мы рассмотрим паттерн проектирования "Абстрактная фабрика".

Классификация

Тип: Порождающий

Определение: Абстрактная фабрика - это порождающий паттерн проектирования, который предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов.

Грубо говоря, абстрактная фабрика - это "фабрика фабрик", данный паттерн позволяет решить проблему создания целых семейств связанных объектов, без указания конкретных классов продуктов.
С помощью абстрактной фабрики вы можете предоставить библиотеку объектов не расскрывая их реализацию.

Из чего состоит и как работает данный паттерн

1. Абстрактного класса/Интерфейса абстрактной фабрики. Содержит абстрактные методы которые возвращают абстрактные продукты, связанные одной конпцецией.

class AbstractFactory(ABC):
@abstractmethod
def create_product_a(self):
...

@abstractmethod
def create_product_b(self):
...


2. Конретные фабрики. Конкретные фабрики реализут операции которые создают конкретные продукты.

class ConcreteFactory1(AbstractFactory):
def create_product_a(self):
return ConcreteProductA1()

def create_product_b(self):
return ConcreteProductB1()

class ConcreteFactory2(AbstractFactory):
def create_product_a(self):
return ConcreteProductA2()

def create_product_b(self):
return ConcreteProductB2()


3. Абстрактные классы продуктов. Реализуют интерфейс для всех конретных продуктов своего семейства.

class AbstractProductA(ABC):
@abstractmethod
def very_important_super_function_a(self) -> str:
...

class AbstractProductB(ABC):
@abstractmethod
def very_important_super_function_b(self) -> str:
...


4. Конкретные продукты. Реализуют абстрактные продукты. Продукты одного семейства не могут взаимодействовать, с продуктами другого семейства.

class ConcreteProductA1(AbstractProductA):
def very_important_super_function_a(self) -> str:
return "Product A1"


class ConcreteProductA2(AbstractProductA):
def very_important_super_function_a(self) -> str:
return "Product A2"

class ConcreteProductB1(AbstractProductB):
def very_important_super_function_b(self) -> str:
return "Product B1"


class ConcreteProductB2(AbstractProductB):
def very_important_super_function_b(self) -> str:
return "Product B2"


5. Клиент. Клиентский код работает исключительно с абстрактной фабрикой и абстрактными продуктами.

def client(factory: AbstractFactory) -> str:
return factory.create_product_a().very_important_super_function_a()

for factory in (ConcreteFactory1, ConcreteFactory2, ...):
client(factory)


Плюсы данного паттерна

1. Реализует принцип открытости/закрытости.

2. Упращает поддержку кода.

3. Выделяет код производства продуктов в одно место, упрощая поддержку кода.

Минусы данного паттерна

1. Снижает читаемость программы из-за введения множества дополнительных классов.

Пример и задача

Дед Мороз и Пасхальный кролик не успевают сделать игрушки к празднику, которые они будут дарить детям.
Все существует 3 вида игрушек:

1. Лошадка
2. Зайчик
3. Шарик

Всё было бы просто однако Деду Морозу нужны игрушки в новогоднем стиле, а пасхальному кролику в пасхальном.
Создайте абстрактную фабрику игрушек и спасите эти праздники!

Пример из реального кода

Пример из реального кода предоставил @Tishka17. Он разработал замечательный фреймворк aiogram_dialog для разработки интерактивных диалогов и меню в телеграмм ботах, как обычное приложение с графическим интерфейсом.

Вот здесь он использует данный паттерн: https://github.com/Tishka17/aiogram_dialog/blob/develop/aiogram_dialog/manager/manager_middleware.py#L23

Вот его объяснение, какую задачу он решает в данном случае:

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

Вопрос с собеседования

Что такое Dependency inversion principle?

Ответ:

Dependency inversion principle - принцип инверсии зависимостей.

Зависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

#interview

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

#паттерны

Введение

Сегодня мы рассмотрим паттерн проектирования "Адаптер".

Классификация

Тип:
Структурный

Определение: Адаптер — это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе.
Адаптер выступает прослойкой между объектами превращая вызовы одного в понятные для другого.

Очень удобно понять адаптер на примере из жизни. Представим человеку который говорит только на французском нужно рассказать историю человеку который понимает только немецкий. Сами понять они друг друга не смогут, поэтому им понадобится переводчик, который переведёт французкий на немецкий. В данном случае переводчик выступит адаптером.

Из чего состоит и как работает паттерн адаптер

1. Клиент. Описывает бизнес логику программы. Работает с адаптером и другими объектами.


adapter = Adapter()
result = adapter.do() + "5"


2. Интерфейс с которым может работать клиентский код.


class Test1:
def do(self) -> str:
return "3"


3. Класс, который имеет нужную клиенту логику, однако клиент не может с ним общаться, так как интерфейс данного класса ему не понятен.


class Test2:
def specific_do(self) -> float:
return 3.4


4. Адаптер - класс который помогает клиенту использовать функционал незнакомого ему сервиса в правильном формате. Реализует клиентский интерфейс. Содержит ссылку на незнакомый сервис. Адаптер при получении вызовов от клиента через клиентский интерфейс и переводит их в вызовы незнакомого сервиса в правильном формате.


class Adapter(Test1, Test2):
def do(self) -> str:
return f"Translated: {round(self.specific_do())}"


Уточнение: Приложение должно использовать объект адаптера только через клиентский интерфейс. Это позволит легко создавать и изменять адаптеры в будущем.

Плюсы данного паттерна

1. Скрывает все "низкоуровневые" преобразования интерфейсов от клиента. Реализует принцип абстракция.

Минусы данного паттерна

Таковых я не обнаружил

Пример и задача

В качестве примера возьмём класс с методом do который возвращает небольшой текст. Также есть класс с методом secret_do который возвращает другую строку, зашифрованную шифром Цезаря со сдвигом 5, которая ещё и полностью развёрнута.

В виде клиента выступает функция которая постит текст в ваш блог.(Можете просто создать функцию которая выводит переданный в неё текст). Естественно она должна принимать только расшифрованный текст.

Реализуйте адаптер для второго класса, который спасёт ваш блог от зашифрованных постов.

Пример из реального кода

https://github.com/aiogram/aiogram/blob/b190bbba1915ed3b7f311a780f34723ebd6b5acd/aiogram/contrib/fsm_storage/redis.py#L280

Вот его объяснение какую задачу решает адаптер в данном случае:

Здесь адаптер дает возможность контроллеру хранилища (RedisStorage) работать с первой версией редиса, т.е. адаптирует aioredis-v1, там еще есть адаптер для aioredis-v2, но он в отличие от первой версии адаптирует только создание клиента редиса


Дополнительные материалы

https://habr.com/ru/post/85095/

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

🚩 Шаблон проектирования Команда

🟣 Подробное описание паттерна

Команда (англ. Command) — один из поведенческих шаблонов, добавляющий слой абстракции между действием и объектом, который это действие вызывает. Пример - кнопка и действие, которое выполняется при нажатии на эту кнопку.

Паттерн преобразовывает запрос на выполнение действия в отдельный объект-команду.

Поскольку команды - это объекты, с ними можно проводить любые операции, которые в принципе возможны для объектов. Например, их можно передавать как аргументы при вызове методов, ставить в очередь и логировать.

🟪 Когда применяется Команда?

🔎 Когда вы хотите параметризовать объекты выполняемым действием.

🔎 Когда вы хотите ставить операции в очередь, выполнять их по расписанию или передавать по сети.

🔎 Когда вам нужна операция отмены.

🗂 Код на Python

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

TypeScript: паттерны проектирования

Читать

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

Фабричный метод — это порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.

from __future__ import annotations
from abc import ABC, abstractmethod


class Creator(ABC):
"""
Класс Создатель объявляет фабричный метод, который должен возвращать объект
класса Продукт. Подклассы Создателя обычно предоставляют реализацию этого
метода.
"""

@abstractmethod
def factory_method(self):
"""
Обратите внимание, что Создатель может также обеспечить реализацию
фабричного метода по умолчанию.
"""
pass

def some_operation(self) -> str:
"""
Также заметьте, что, несмотря на название, основная обязанность
Создателя не заключается в создании продуктов. Обычно он содержит
некоторую базовую бизнес-логику, которая основана на объектах Продуктов,
возвращаемых фабричным методом. Подклассы могут косвенно изменять эту
бизнес-логику, переопределяя фабричный метод и возвращая из него другой
тип продукта.
"""

# Вызываем фабричный метод, чтобы получить объект-продукт.
product = self.factory_method()

# Далее, работаем с этим продуктом.
result = f"Creator: The same creator's code has just worked with {product.operation()}"

return result


"""
Конкретные Создатели переопределяют фабричный метод для того, чтобы изменить тип
результирующего продукта.
"""


class ConcreteCreator1(Creator):
"""
Обратите внимание, что сигнатура метода по-прежнему использует тип
абстрактного продукта, хотя фактически из метода возвращается конкретный
продукт. Таким образом, Создатель может оставаться независимым от конкретных
классов продуктов.
"""

def factory_method(self) -> Product:
return ConcreteProduct1()


class ConcreteCreator2(Creator):
def factory_method(self) -> Product:
return ConcreteProduct2()


class Product(ABC):
"""
Интерфейс Продукта объявляет операции, которые должны выполнять все
конкретные продукты.
"""

@abstractmethod
def operation(self) -> str:
pass


"""
Конкретные Продукты предоставляют различные реализации интерфейса Продукта.
"""


class ConcreteProduct1(Product):
def operation(self) -> str:
return "{Result of the ConcreteProduct1}"


class ConcreteProduct2(Product):
def operation(self) -> str:
return "{Result of the ConcreteProduct2}"


def client_code(creator: Creator) -> None:
"""
Клиентский код работает с экземпляром конкретного создателя, хотя и через
его базовый интерфейс. Пока клиент продолжает работать с создателем через
базовый интерфейс, вы можете передать ему любой подкласс создателя.
"""

print(f"Client: I'm not aware of the creator's class, but it still works.\n"
f"{creator.some_operation()}", end="")


if __name__ == "__main__":
print("App: Launched with the ConcreteCreator1.")
client_code(ConcreteCreator1())
print("\n")

print("App: Launched with the ConcreteCreator2.")
client_code(ConcreteCreator2())

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

⚠️ Научитесь международному стандарту построения архитектуры предприятия. Начните обучение на курсе «Архитектура корпорации. Togaf 10».

Вебинар 1: «Новшества языка ArchiMate 4.0»
⏰8 июля в 20:00 мск

Программа вебинара:
1. Отличие метамоделей ArchiMate 4.0 от ArchiMate 3.2.
2. Практические рекомендации и практические визуализации по миграции существующих моделей
3. Ответы на вопросы в прямом эфире


Вебинар 2: «Новшества языка ArchiMate 4.0»
⏰15 июля в 20:00 мск

Программа вебинара:

1. Роль бизнес-слоя в корпоративной архитектуре и его место в TOGAF 10.
2. Основные элементы ArchiMate 3.2 для моделирования бизнес-аспектов
3. Практический пример описания базовых бизнес-процессов организации с ArchiMate.

Вебинар 3: «Новшества языка ArchiMate 4.0»
⏰21 июля в 20:00 мск

Программа вебинара:
Разберём, где именно в архитектуре скрываются данные, как они связаны с процессами и системами, а также почему управление данными становится важным элементом Data-Driven подхода.

Записывайтесь ➡️ https://vk.cc/cZfDUj

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

🟣 Навигация по каналу:

▶️ Одиночка (Singleton)

▶️ Итератор (Iterator)

▶️ Декоратор (Decorator)

▶️ Фасад (Facade)

▶️ Адаптер (Adapter)

▶️ Абстрактная фабрика (Abstract Factory)

▶️ Мост (Bridge)

▶️ Посредник (Mediator)

▶️ Приспособленец (Flyweigth)

▶️ Команда (Command)

▶️ Посетитель (Visitor)

▶️ Фабричный метод (Factory Method)

▶️ Хранитель (Memento)

▶️ Компоновщик (Composite)

▶️ Заместитель (Proxy)

▶️ Наблюдатель (Observer)

▶️ Прототип (Prototype)

▶️ Стратегия (Strategy)

▶️ Цепочка обязанностей (Chain of Responsibility)

▶️ Строитель (Builder)

Вопросы с интервью: #interview

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

🚩 Шаблон проектирования Фасад

🟣 Подробное описание паттерна

Структурный паттерн Фасад (англ. Facade) помогает скрыть способ реализации сложной системы и предоставляет клиенту простой интерфейс взаимодействия с ней.

Другими словами, данный паттерн проектирования используется в качестве “обертки”, скрывающей детали реализации.

Фасад полезен, если вы используете какую-то сложную библиотеку со множеством подвижных частей, но вам нужна только часть её возможностей.

🗂 Код на Python

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

Вопрос с собеседования

Зачем нужна инкапсуляция?

Ответ опубликуем завтра, а пока пишите свои варианты в комментариях!

#interview

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

🔥 Приглашаем на бесплатный открытый вебинар курса «Высоконагруженные системы: архитектура и масштабирование»:

«Асинхронная обработка данных в высоконагруженных системах»

🗓 Когда: 16 июня, 20:00 (мск)

Когда система выходит на тысячи и миллионы запросов в секунду, синхронная обработка превращается в настоящее узкое горлышко. Асинхронная архитектура помогает снять блокировки, повысить отзывчивость и масштабировать приложение без резкого роста ресурсов.

На вебинаре разберём, как грамотно внедрять асинхронность и строить по-настоящему производительные системы.

Что будет на вебинаре:
— Зачем и когда переходить на асинхронную обработку данных в высоконагруженных проектах
— Очереди сообщений, веб-сокеты и другие инструменты асинхронного взаимодействия
— Реальный архитектурный кейс: от веб-сервера до брокера сообщений и базы данных
— Типичные узкие места асинхронных систем и проверенные способы их устранения

Что вы получите:
— Чёткое понимание принципов асинхронной архитектуры и её влияния на производительность
— Реальные примеры решений, которые можно сразу применять в своих проектах
— Знания, как избегать типичных ошибок и строить стабильные, отказоустойчивые системы

👉 Зарегистрироваться: https://vk.cc/cYtuQf

Бесплатное занятие приурочено к курсу «Высоконагруженные системы: архитектура и масштабирование», где вы научитесь проектировать высоконагруженные системы, способные выдерживать экстремальные нагрузки и работать стабильно в любых условиях.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

🚩 Шаблон проектирования Декоратор

🟣 Подробное описание паттерна

Структурный паттерн Декоратор (англ. Decorator) позволяет расширять функциональность без использования наследования.

Дело в том, что механизм наследования имеет несколько проблем:

1⃣ Он статичный, т.е. не дает возможности менять поведение уже существующего объекта.
2⃣ Он не позволяет наследовать поведение нескольких классов одновременно.

Декоратор позволяет обойти эти проблемы. Суть этого шаблона отлично передает его второе название — "обертка". Вы помещаете один объект в другой — обертку. Обертка запускает базовое поведение объекта, а затем что-то добавляет к нему.

🗂 Код на Python

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

🕯 Паттерн Proxy (Прокси)

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

Использование:

🔹 Когда необходимо контролировать доступ к ресурсоемким объектам или операциям.
🔹 Для добавления дополнительной функциональности без изменения исходного объекта.

Преимущества:

1⃣ Позволяет контролировать доступ к реальному объекту, например, для ленивой инициализации или кэширования. Это может улучшить производительность, так как ресурсоемкие объекты создаются только тогда, когда они действительно нужны.

2⃣ Позволяет контролировать доступ к объектам, добавляя проверки перед вызовом методов. Это полезно для управления доступом в сетевых приложениях или для защиты данных.

3⃣ Позволяет оптимизировать работу с удаленными объектами, минимизируя количество вызовов или обрабатывая их асинхронно. Это снижает нагрузку на систему и повышает скорость работы приложения.

4⃣ Может использоваться для логирования или отслеживания вызовов методов реального объекта, не внося изменений в сам объект. Это упрощает мониторинг и отладку системы.

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

Паттерн Singletone с примером на JavaScript

Несмотря на то что в последнее время все больше задач мы обычно решаем в функциональном стиле я хотел бы сегодня вам рассказать о одном из самых распространенных классовых паттернов - синглтон.

И так что это:
Паттерн Singleton означает создание только одного экземпляра класса и доступ к нему через методы-геттеры.

Пример использования:

class Singleton {
 constructor() {
  if (!Singleton.instance) {
   Singleton.instance = this;
  }
  return Singleton.instance;
 }

 someMethod() {
  console.log('Hello from Singleton!');
 }
}

const instance1 = new Singleton();
const instance2 = new Singleton();

instance1.someMethod(); // "Hello from Singleton!"
console.log(instance1 === instance2); // true

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

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

🚩 Шаблон проектирования Заместитель

🟣 Подробное описание паттерна

Заместитель (англ. Proxy) — структурный паттерн проектирования. Он позволяет подставлять вместо реальных объектов специальные объекты-заменители. Эти объекты перехватывают вызовы к оригинальному объекту, позволяя сделать что-то до или после передачи вызова оригиналу.

🟪 Ситуации, когда можно использовать паттерн Заместитель:

🔎 Виртуальный proxy является заместителем объектов, создание которых обходится дорого. Реальный объект создается только при первом запросе/доступе клиента к объекту.

🔎 Удаленный proxy предоставляет локального представителя для объекта, который находится в другом адресном пространстве ("заглушки" в RPC и CORBA).

🔎 Защитный proxy контролирует доступ к основному объекту. "Суррогатный" объект предоставляет доступ к реальному объекту, только вызывающий объект имеет соответствующие права.

🔎 Интеллектуальный proxy выполняет дополнительные действия при доступе к объекту.

🗂 Код на Python

Читать полностью…

Pattern Guru. Шаблоны проектирования. Архитектура ПО

Паттерны

В одном репозитории собрано 111 паттернов проектирования. На данный момент это самый популярный репозиторий на языке Java, у него почти 50k звёзд.

Для каждого паттерна есть подробное описание и примеры реализации на Java: https://github.com/iluwatar/java-design-patterns

#паттерны #java

Читать полностью…
Subscribe to a channel