Pattern Guru. Шаблоны проектирования. Архитектура ПО
رفتن به کانال در Telegram
Патерны программирования. Архитектура ПО. Микросервисы @anothertechrock
نمایش بیشتر3 144
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-67 روز
-2330 روز
آرشیو پست ها
Вопрос с собеседования
Зачем нужна инкапсуляция?
Ответ:
Инкапсуляция позволяет скрыть данные и обернуть данные и код, который работает над ними, в единое целое.
#interview
Вопрос с собеседования
Зачем нужна инкапсуляция?
Ответ опубликуем завтра, а пока пишите свои варианты в комментариях!
#interview
⁉️ Как на практике соединить бизнес-цели и IT-архитектуру? Ответ прост: моделировать потоки ценности с помощью ArchiMate.
Открытый вебинар 24 сентября — это уникальная возможность понять, как Business Capability Map помогает организовать деятельность компании и как эти карты можно трансформировать в потоки создания ценности (Value Stream). Эксперт поделится реальными кейсами и разберёт, как эффективно визуализировать и управлять процессами с помощью ArchiMate.
Курс «Archimate» — это ваш шанс научиться работать с ключевыми бизнес-методами, которые становятся основой архитектуры компании. Освойте создание Capability Map и Value Stream, и применяйте эти инструменты для улучшения бизнес-процессов.
➡️ Пройдите вебинар и получите скидку на курс «Archimate»: https://vk.cc/cPz7iR
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
+7
Шаблон проектирования Строитель
🟣 Подробное описание паттерна
Строитель (англ. Builder) — порождающий паттерн проектирования. Он позволяет создавать сложные объекты пошагово. Строитель дает возможность использовать один и тот же код строительства для получения разных представлений объектов.
От абстрактной фабрики отличается тем, что делает акцент на пошаговом конструировании объекта. Строитель возвращает объект на последнем шаге, тогда как абстрактная фабрика возвращает объект немедленно.
🟪 Паттерн Строитель может помочь в решении следующих задач:
🔎 В системе могут существовать сложные объекты, которые сложно или невозможно создать за одну операцию. Требуется поэтапное построение объектов с контролем результатов выполнения каждого этапа.
🔎 Данные должны иметь несколько представлений. Допустим, есть некоторый исходный документ в формате RTF (Rich Text Format), в общем случае содержащий текст, графические изображения и служебную информацию о форматировании (размер и тип шрифтов, отступы и др.). Если этот документ в формате RTF преобразовать в другие форматы (например, Microsoft Word или простой ASCII-текст), то полученные документы и будут представлениями исходных данных.
🗂 Код на Python+8
🚩 Шаблон проектирования Цепочка обязанностей
🟣 Подробное описание паттерна
Цепочка обязанностей (англ. Chain of Responsibility) — поведенческий паттерн проектирования. Он позволяет передавать запросы по цепочке обработчиков последовательно. Каждый последующий обработчик решает, может ли он обработать запрос сам и стоит ли передавать запрос дальше по цепи.
🙂Аналогия из жизни🙂
Самый наглядный пример шаблона — компьютерная сеть. Пусть в сетевой модели есть 4 типа обработчиков — сеть, маршрутизатор, форвардер и сервер. Также есть всего один тип запроса — запрос на обработку сервером. Обработчики ведут себя следующим образом: сеть — просто предает по своей среде запрос, маршрутизатор — передает запрос из одной сети в другую, форвардер — передает запрос конкретному хосту, сервер — обрабатывает запрос.
Узлы сети представляют собой конвейер обработчиков. Запрос — конкретное сообщение. Запрос, двигаясь по цепочке, обрабатывается (маршрутизируется, форвардится) каждым ее узлом и передается дальше. До тех пор, пока не будет окончательно обработан сервером.
🗂 Код на Python+4
🚩 Шаблон проектирования Стратегия
🟣 Подробное описание паттерна
Стратегия (англ. Strategy) относится к поведенческим шаблонам проектирования. Цель этого паттерна - выделить схожие алгоритмы, решающие конкретную задачу. Реализация алгоритмов выносится в отдельные классы и предоставляется возможность выбирать алгоритмы во время выполнения программы.
🙂Аналогия из жизни🙂
Вам нужно добраться до аэропорта. Можно доехать на автобусе, такси или велосипеде. Здесь вид транспорта является стратегией. Вы выбираете конкретную стратегию в зависимости от контекста — наличия денег или времени до отлёта.
🟪 Когда применять?
🔎 Когда вам нужно использовать разные вариации какого-то алгоритма внутри одного объекта.
🔎 Когда у вас есть множество похожих классов, отличающихся только некоторым поведением.
🔎 Когда вы не хотите обнажать детали реализации алгоритмов для других классов.
🔎 Когда различные вариации алгоритмов реализованы в виде развесистого условного оператора. Каждая ветка такого оператора представляет собой вариацию алгоритма.
🗂 Код на Python+6
🚩 Шаблон проектирования Прототип
🟣 Подробное описание паттерна
Прототип (англ. Prototype) — порождающий паттерн проектирования. Он позволяет копировать объекты, не вдаваясь в подробности их реализации.
🟪 Когда использовать Прототип?
🔎 Когда конкретный тип создаваемого объекта должен определяться динамически во время выполнения.
🔎 Когда нежелательно создание отдельной иерархии классов фабрик для создания объектов-продуктов из параллельной иерархии классов (как это делается, например, при использовании паттерна Абстрактная фабрика).
🔎 Когда клонирование объекта является более предпочтительным вариантом, чем его создание и инициализация с помощью конструктора. Особенно если известно, что объект может принимать небольшое ограниченное число возможных состояний.
🗂 Код на Python+6
🚩 Шаблон проектирования Наблюдатель
🟣 Подробное описание паттерна
Наблюдатель (англ. Observer) — поведенческий паттерн проектирования. Определяет зависимость типа "один ко многим" между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом и автоматически обновляются.
🟪 Когда применять:
🔎 Когда после изменения состояния одного объекта требуется что-то сделать в других, но вы не знаете наперёд, какие именно объекты должны отреагировать.
🔎 Когда одни объекты должны наблюдать за другими, но только в определённых случаях.
🗂 Код на Python
+5
🚩 Шаблон проектирования Заместитель
🟣 Подробное описание паттерна
Заместитель (англ. Proxy) — структурный паттерн проектирования. Он позволяет подставлять вместо реальных объектов специальные объекты-заменители. Эти объекты перехватывают вызовы к оригинальному объекту, позволяя сделать что-то до или после передачи вызова оригиналу.
🟪 Ситуации, когда можно использовать паттерн Заместитель:
🔎 Виртуальный proxy является заместителем объектов, создание которых обходится дорого. Реальный объект создается только при первом запросе/доступе клиента к объекту.
🔎 Удаленный proxy предоставляет локального представителя для объекта, который находится в другом адресном пространстве ("заглушки" в RPC и CORBA).
🔎 Защитный proxy контролирует доступ к основному объекту. "Суррогатный" объект предоставляет доступ к реальному объекту, только вызывающий объект имеет соответствующие права.
🔎 Интеллектуальный proxy выполняет дополнительные действия при доступе к объекту.
🗂 Код на Python+6
🚩 Шаблон проектирования Хранитель
🟣 Подробное описание паттерна
Хранитель (англ. Memento) – поведенческий паттерн проектирования. Он позволяет определять, сохранять, а также восстанавливать предыдущие состояния объектов без нарушения принципа инкапсуляции.
🟪 Применяйте этот паттерн, когда:
🔎Вам нужно сохранять мгновенные снимки состояния объекта (или его части), чтобы впоследствии объект можно было восстановить в том же состоянии.
🔎 Прямое получение состояния объекта раскрывает приватные детали его реализации, нарушая инкапсуляцию.
🗂 Код на Python+5
🚩 Шаблон проектирования Компоновщик
🟣 Подробное описание паттерна
Компоновщик (англ. Composite) — структурный паттерн проектирования. Он позволяет сгруппировать множество объектов в древовидную структуру, а затем работать с ней так, как будто это единичный объект.
🙂Аналогия из жизни🙂
Армии большинства государств могут быть представлены в виде перевёрнутых деревьев. На нижнем уровне у вас есть солдаты, затем взводы, затем полки, а затем целые армии. Приказы отдаются сверху и спускаются вниз по структуре командования, пока не доходят до конкретного солдата.
🟪 Достоинства паттерна:
🔎 В систему легко добавлять новые примитивные или составные объекты, так как Composite использует общий базовый класс Component.
🔎 Код клиента имеет простую структуру – примитивные и составные объекты обрабатываются одинаковым образом.
🔎 Паттерн позволяет легко обойти все узлы древовидной структуры.
🗂 Код на Python+6
🚩 Шаблон проектирования Фабричный метод
🟣 Подробное описание паттерна
Фабричный метод (англ. Factory Method) — порождающий паттерн проектирования. Он определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
🟪 Используется, когда:
🔎 Классу заранее неизвестно, объекты каких подклассов ему нужно создать.
🔎 Обязанности делегируются подклассу, а знания о том, какой подкласс принимает эти обязанности, локализованы.
🔎 Создаваемые объекты родительского класса специализируются подклассами.
Применяйте шаблон Фабричный метод в случае, когда хотите без проблем внедрять в вашу программу новые объекты с новыми конфигурациям для взаимодействия с основной бизнес-логикой.
🗂 Код на Python+5
🚩 Шаблон проектирования Посетитель
🟣 Подробное описание паттерна
Посетитель (англ. Visitor) — это поведенческий паттерн проектирования, который позволяет добавлять в программу новые операции, не изменяя классы объектов, над которыми эти операции могут выполняться.
🟪 Когда применяется Посетитель?
🔎 Когда вам нужно выполнить какую-то операцию над всеми элементами сложной структуры объектов, например, деревом.
🔎 Когда над объектами сложной структуры объектов надо выполнять некоторые не связанные между собой операции, но вы не хотите «засорять» классы такими операциями.
🔎 Когда новое поведение имеет смысл только для некоторых классов из существующей иерархии.
🗂 Код на Python+3
🚩 Шаблон проектирования Команда
🟣 Подробное описание паттерна
Команда (англ. Command) — один из поведенческих шаблонов, добавляющий слой абстракции между действием и объектом, который это действие вызывает. Пример - кнопка и действие, которое выполняется при нажатии на эту кнопку.
Паттерн преобразовывает запрос на выполнение действия в отдельный объект-команду.
Поскольку команды - это объекты, с ними можно проводить любые операции, которые в принципе возможны для объектов. Например, их можно передавать как аргументы при вызове методов, ставить в очередь и логировать.
🟪 Когда применяется Команда?
🔎 Когда вы хотите параметризовать объекты выполняемым действием.
🔎 Когда вы хотите ставить операции в очередь, выполнять их по расписанию или передавать по сети.
🔎 Когда вам нужна операция отмены.
🗂 Код на Python+6
🚩 Шаблон проектирования Приспособленец (Легковес)
🟣 Подробное описание паттерна
Приспособленец (англ. Flyweight) — структурный паттерн проктирования. Он позволяет вместить большее количество объектов в отведенную оперативную память.
Основная идея паттерна — различие между внутренним и внешним состоянием объекта. Внешнее состояние передается клиентом, использующим приспособленца, в некотором контексте. Внутреннее состояние хранится непосредственно в приспособленце и позволяет разделять их. Под разделением понимается возможность одновременной работы нескольких клиентов с одним и тем же приспособленцем.
🗂 Код на Python💻 Wasm на сервере в высоконагруженных системах 🚀
🔥 20 августа в 20:00 мск — открытый вебинар в OTUS.
На вебинаре вы узнаете:
- Как использовать WebAssembly для серверной разработки вне браузера.
- Как запускать wasm-приложения в продакшене, независимо от ОС и языка разработки.
- Как компилировать и масштабировать wasm-приложения в облаке с помощью Docker, NGINX Unit, Envoy и Knative.
- Как профилировать и оценивать производительность wasm на сервере.
🎓 Что будет на вебинаре?
- Сборка wasm-модулей с помощью TinyGo, Emscripten, Cargo.
- Настройка окружения с WASI для запуска серверных wasm-приложений.
- Запуск wasm в контейнерах и публикация через NGINX Unit.
- Интеграция с Envoy и деплой wasm-приложений в Knative.
- Инструменты для анализа производительности: wzprof, логи, метрики.
🎓 После вебинара вы:
- Поймёте, как WebAssembly работает на сервере и зачем его использовать.
- Освоите практическую работу с wasm, от сборки до масштабирования.
- Получите навыки интеграции wasm в существующую инфраструктуру.
- Узнаете, как анализировать производительность wasm-приложений в высоконагруженных системах.
💡 Присоединяйтесь, чтобы научиться запускать WebAssembly в продакшене и улучшить производительность ваших серверных приложений!
🎁Все участники получат чек-лист “Разбор ошибок: 5 распространенных проблем при проектировании отказоустойчивых хранилищ”
👉 Регистрация https://vk.cc/cOxxWP
Бесплатное занятие приурочено к старту курса Highload Architect, обучение на котором позволит освоить решения, которые выдерживают большое количество запросов в секунду и правильно оптимизировать работоспособность серверов
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
+6
🚩 Шаблон проектирования Посредник
🟣 Подробное описание паттерна
Посредник (англ. Mediator) относится к поведенческим паттернам. Он позволяет уменьшить связанность множества классов между собой, перемещая эти связи в один класс-посредник.
🙂Аналогия из жизни 🙂
Представьте себе контроль трафика в аэропорту: все решения о том, какие самолеты могут взлетать или садиться, принимает диспетчер. Для этого все сообщения не пересылаются между самолетами напрямую, а поступают в башню управления. Такой централизованный контроллер и есть «медиатор».
Mediator выступает в качестве посредника в общении между различными модулями, инкапсулируя их взаимодействие.
🗂 Код на Python🔥 От разработчика до архитектора высоконагруженных систем! 🚀
Высоконагруженные системы — необходимость для крупных проектов. Пройдите тест, проверьте свои знания и получите скидку на курс «Highload Architect» от OTUS.
Вы научитесь:
✅ Проектировать масштабируемые системы, способные обрабатывать миллионы запросов
✅ Оптимизировать производительность и работать с отказоустойчивыми архитектурами
✅ Использовать современные инструменты и технологии для создания высоконагруженных решений
✅ Применять лучшие практики в проектировании и разработке серверных приложений
📌 Пройдите тест и получите скидку на курс! Подробности уточняйте у менеджера
👉 Пройти тест https://vk.cc/cOwIqJ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
+6
🚩 Шаблон проектирования Мост
🟣 Подробное описание паттерна
Мост (англ. Bridge) относится к классу структурных паттернов. Он позволяет отделить абстракцию от реализации, благодаря чему становится возможно изменять код в каждой ветке по отдельности.
🟪 Паттерн Мост полезен там, где часто меняется не только сам класс, но и то, что он делает. Он позволяет разделить монолитный класс на несколько отдельных иерархий. После этого вы можете менять их код независимо друг от друга. Это упрощает работу над кодом и уменьшает вероятность внесения ошибок.
🗂 Код на Python+7
🚩 Шаблон проектирования Абстрактная фабрика
🟣 Подробное описание паттерна
Шаблон
Абстрактная фабрика (англ. Abstract Factory) относится к классу порождающих паттернов. Его основное назначение — предоставить интерфейс для создания семейства взаимосвязанных объектов, не указывая конкретные классы этих объектов.
🟪 Этот шаблон стоит использовать, если:
🔎 Ваша система должна быть независимой от способа создания новых объектов
🔎 Создаваемые объекты должны использоваться вместе и быть взаимосвязанными.
Классы абстрактной фабрики часто реализуются фабричными методами, но могут быть реализованы и с помощью паттерна Prototype.
🗂 Код на Python
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
