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

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

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish
3 144
Obunachilar
Ma'lumot yo'q24 soatlar
-67 kunlar
-2330 kunlar
Postlar arxiv
🚩 Шаблон проектирования Адаптер 🟣 Подробное описание паттерна Адаптер (англ. Adapter) — это структурный паттерн проектирова
+4
🚩 Шаблон проектирования Адаптер 🟣 Подробное описание паттерна Адаптер (англ. Adapter) — это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе. Это объект-переводчик, который трансформирует интерфейс или данные одного объекта в такой вид, чтобы он стал понятен другому объекту. При этом адаптер оборачивает один из объектов так, что другой объект даже не знает о наличии первого. 🗂 Код на Python

🚩 Шаблон проектирования Фасад 🟣 Подробное описание паттерна Структурный паттерн Фасад (англ. Facade) помогает скрыть способ
+3
🚩 Шаблон проектирования Фасад 🟣 Подробное описание паттерна Структурный паттерн Фасад (англ. Facade) помогает скрыть способ реализации сложной системы и предоставляет клиенту простой интерфейс взаимодействия с ней. Другими словами, данный паттерн проектирования используется в качестве “обертки”, скрывающей детали реализации. Фасад полезен, если вы используете какую-то сложную библиотеку со множеством подвижных частей, но вам нужна только часть её возможностей. 🗂 Код на Python

🚩 Шаблон проектирования Декоратор 🟣 Подробное описание паттерна Структурный паттерн Декоратор (англ. Decorator) позволяет р
+3
🚩 Шаблон проектирования Декоратор 🟣 Подробное описание паттерна Структурный паттерн Декоратор (англ. Decorator) позволяет расширять функциональность без использования наследования. Дело в том, что механизм наследования имеет несколько проблем: 1️⃣ Он статичный, т.е. не дает возможности менять поведение уже существующего объекта. 2️⃣ Он не позволяет наследовать поведение нескольких классов одновременно. Декоратор позволяет обойти эти проблемы. Суть этого шаблона отлично передает его второе название — "обертка". Вы помещаете один объект в другой — обертку. Обертка запускает базовое поведение объекта, а затем что-то добавляет к нему. 🗂 Код на Python

🚩 Шаблон проектирования Итератор 🟣 Подробное описание паттерна Идея поведенческого паттерна Итератор (англ. Iterator) состо
+4
🚩 Шаблон проектирования Итератор 🟣 Подробное описание паттерна Идея поведенческого паттерна Итератор (англ. Iterator) состоит в том, чтобы вынести поведение обхода коллекции в отдельный объект. Таким образом, если вам понадобится изменить или добавить новый способ обхода, вы сможете это сделать, не затрагивая код самой коллекции. 🗂 Код на Python

🚩 Шаблон проектирования Singleton 🟣Подробное описание паттерна Лучшие методы: 1. Декоратор 2. Базовый класс 3. Метакласс 4.
+2
🚩 Шаблон проектирования Singleton 🟣Подробное описание паттерна Лучшие методы: 1. Декоратор 2. Базовый класс 3. Метакласс 4. Декоратор возвращает класс с тем же именем 5. Модуль 🗂 Код на Python

💻 Мониторинг в высоконагруженных проектах 🔧 🔥 12 августа в 20:00 мск — открытый вебинар в OTUS. На вебинаре рассмотрим: -
💻 Мониторинг в высоконагруженных проектах 🔧 🔥 12 августа в 20:00 мск — открытый вебинар в OTUS. На вебинаре рассмотрим: - Почему мониторинг — ключ к стабильности высоконагруженных систем? - Методы и инструменты мониторинга, подходящие для проектов с высокой нагрузкой. - Как настроить и оптимизировать мониторинг для выявления и предотвращения проблем. - Как эффективно использовать метрики и логи для улучшения производительности. - Реальные кейсы мониторинга в сложных системах. 🎓 После вебинара вы: - Научитесь правильно настраивать мониторинг для высоконагруженных проектов. - Узнаете, как использовать данные мониторинга для повышения производительности и стабильности систем. - Получите практические рекомендации по оптимизации мониторинга. 🔧 Присоединяйтесь, чтобы научиться отслеживать и поддерживать стабильность систем, работающих под высокой нагрузкой! 🎁Все участники получат шаблон развертывания кластера RabbitMQ 👉 Регистрация https://vk.cc/cOjdAU Бесплатное занятие приурочено к старту курса Highload Architect, обучение на котором позволит освоить решения, которые выдерживают большое количество запросов в секунду и правильно оптимизировать работоспособность серверов Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Какие из перечисленных паттернов относятся к структурным?
Anonymous voting

Что под капотом у RAG? На схеме всё просто: LLM + Retrieval + память = RAG. А в жизни? Там куча всего: 📌 Вычисление эмбеддин
Что под капотом у RAG? На схеме всё просто: LLM + Retrieval + память = RAG. А в жизни? Там куча всего: 📌 Вычисление эмбеддингов 📌 Обновление данных 📌 Индексация 📌 Фильтрация 📌 Отказоустойчивость 📌 Масштабирование Яндекс 14 августа покажет, как они это решают внутри YDB. Там разберут и архитектуру, и примеры запросов. Хороший вариант, если вы думаете: «А не сделать ли нам своё хранилище знаний под ИИ».

Определяет группу алгоритмов, инкапсулирует их и делает взаимозаменяемыми. Позволяет изменить алгоритм независимо от клиентов, их использующих.
Anonymous voting

Коллеги, давайте еще немного сдвинем сроки выхода приложения, вернемся к вопросу через неделю через полгода. Любимая фраза 😎
Коллеги, давайте еще немного сдвинем сроки выхода приложения, вернемся к вопросу через неделю через полгода. Любимая фраза 😎 Как ускорить процесс разработки и вывод продуктов на рынок? Настраиваем DevOps-конвейер от Сферы 🧑‍💻 Сфера.Сборка — это платформенная экосистема всех необходимых инструментов, которые позволяют автоматизировать процесс разработки и управления жизненным циклом приложений. DevOps-конвейер Сферы: 🛑 «Сфера.Портал разработки» — единая точка входа для всех разработчиков проекта и инструмент для построения сквозного автоматизированного процесса разработки технологических продуктов. 🛑 «Сфера.CI/CD» — связующее звено всего конвейера, отвечает за оркестрацию DevOps-процесса. 🛑 «Сфера.Дистрибутивы и лицензии» — инструмент для управления артефактами разработки ПО, позволяет создавать репозитории и управлять ими, а также анализировать состав кода, реализовывать собственные политики применения открытых программных компонентов. 🛑 «Сфера.Код» — Git-инструмент для совместной работы, позволяющий хранить, версионировать, консолидировать код и передавать его в систему оркестрации сборки. DevOps-конвейер Сферы легко интегрируется со многими существующими платформами: AD/LDAP, системами мониторинга, аудита и журналирования. 📌 Подробнее о всех возможностях DevOps-конвейера Сферы. Информация о рекламодателе.

🕯 Паттерн Proxy (Прокси) Proxy — это структурный паттерн, который предоставляет объект-заместитель для управления доступом к
🕯 Паттерн Proxy (Прокси) Proxy — это структурный паттерн, который предоставляет объект-заместитель для управления доступом к другому объекту, обеспечивая контроль над его использованием. Использование: 🔹 Когда необходимо контролировать доступ к ресурсоемким объектам или операциям. 🔹 Для добавления дополнительной функциональности без изменения исходного объекта. Преимущества: 1️⃣ Позволяет контролировать доступ к реальному объекту, например, для ленивой инициализации или кэширования. Это может улучшить производительность, так как ресурсоемкие объекты создаются только тогда, когда они действительно нужны. 2️⃣ Позволяет контролировать доступ к объектам, добавляя проверки перед вызовом методов. Это полезно для управления доступом в сетевых приложениях или для защиты данных. 3️⃣ Позволяет оптимизировать работу с удаленными объектами, минимизируя количество вызовов или обрабатывая их асинхронно. Это снижает нагрузку на систему и повышает скорость работы приложения. 4️⃣ Может использоваться для логирования или отслеживания вызовов методов реального объекта, не внося изменений в сам объект. Это упрощает мониторинг и отладку системы.

На фоне ускоренного отказа от зарубежных ИТ-решений многим компаниям приходится пересматривать подход к коммуникациям внутри
На фоне ускоренного отказа от зарубежных ИТ-решений многим компаниям приходится пересматривать подход к коммуникациям внутри организаций. Проблема уже не в том, чтобы «найти замену», а в том, чтобы не потерять в управляемости и безопасности. Интересный пример — платформа DION. Она появилась как альтернатива сразу нескольким западным решениям (вроде Zoom, Slack, MS Teams) и сейчас используется в ряде крупных компаний. Какие плюсы у DION? Все процессы в одном окне — от видеозвонков до совместной работы с документами и конференций до 100 000 зрителей; безопасность встроена по умолчанию: гибридные сценарии, шифрование, интеграция с DLP и SIEM; инструменты для роста бизнеса: встроенный AI анализирует вовлеченность в совещания, автоматически протоколирует встречи и ищет данные в файлах. Как DION используют лидеры рынка? Один из ТОП-5 банков проводит до 150 защищенных конференций ежедневно. Крупнейший медиахолдинг использует DION для организации прямых включений своих корреспондентов. Ведущая авиакомпания сократила время на переключение между разными каналами коммуникаций и бронирует переговорные комнаты с помощью DION.Rooms. Российский разработчик инфраструктурного ПО выбрал DION как основную платформу для корпоративных коммуникаций. Технологии-2025 уже здесь: ✅ легкое масштабирование: более 100 тысяч пользователей, ✅ катастрофоустойчивая конфигурация, ✅ более 5000 пользователей одновременно, ✅ размещение: облако, гибрид, on-premises, ✅ решения под ключ. На рынке пока не так много решений подобного уровня зрелости — особенно с учётом требований крупных компаний и необходимости соблюдения нормативных требований. Попробовать бесплатно можно тут → diongo.ru Для компаний от 120+ пользователей — спецусловия. Информация о рекламодателе.

#паттерны Введение Сегодня мы рассмотрим паттерн проектирования "Адаптер". Классификация Тип: Структурный Определение: Адаптер — это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе. Адаптер выступает прослойкой между объектами превращая вызовы одного в понятные для другого. Очень удобно понять адаптер на примере из жизни. Представим человеку который говорит только на французском нужно рассказать историю человеку который понимает только немецкий. Сами понять они друг друга не смогут, поэтому им понадобится переводчик, который переведёт французкий на немецкий. В данном случае переводчик выступит адаптером. Из чего состоит и как работает паттерн адаптер 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/

💻 Асинхронная обработка данных в высоконагруженных системах 🚀 🔥 29 июля в 20:00 мск — открытый вебинар в OTUS. На вебинаре
💻 Асинхронная обработка данных в высоконагруженных системах 🚀 🔥 29 июля в 20:00 мск — открытый вебинар в OTUS. На вебинаре рассмотрим: - Почему асинхронная архитектура — ключ к масштабируемости и высокой производительности? - Как эффективно использовать очереди сообщений, веб-сокеты и другие инструменты асинхронного взаимодействия? - Пример реального архитектурного решения: от веб-сервера до брокера сообщений и БД. - Как найти узкие места в архитектуре и устранить их для стабильной работы высоконагруженных сервисов. 🎓 После вебинара вы: - Поймёте принципы асинхронной архитектуры и её влияние на производительность. - Освоите методы асинхронной обработки данных для масштабируемых систем. - Получите реальные примеры архитектурных решений для внедрения в свои проекты. - Узнаете, как избегать узких мест и создавать отказоустойчивые системы. 🔧 Присоединяйтесь, чтобы улучшить архитектурные навыки и начать строить системы, готовые к высокой нагрузке! 👉 Регистрация https://vk.cc/cNJATL Бесплатное занятие приурочено к старту курса Highload Architect, обучение на котором позволит освоить решения, которые выдерживают большое количество запросов в секунду и правильно оптимизировать работоспособность серверов Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Вопрос с собеседования Для чего нужен Decorator паттерн в Javascript? Приведите пример. Ответ: Javascript предоставляет удивительно гибкие возможности по работе с функциями: их можно передавать, в них можно записывать данные как в объекты, у них есть свои встроенные методы. Шаблон декоратора динамически расширяет (украшает) поведение объекта. Возможность добавления нового поведения во время выполнения достигается с помощью объекта Decorator, который «оборачивается» вокруг исходного объекта. Несколько декораторов могут добавлять или переопределять функциональность исходного объекта. Примером декоратора является управление безопасностью, где бизнес-объектам предоставляется дополнительный доступ к привилегированной информации в зависимости от привилегий аутентифицированного пользователя. Например, менеджер по персоналу приступает к работе с объектом сотрудника, к которому добавлена (то есть украшена) запись о зарплате сотрудника, чтобы можно было просматривать информацию о зарплате. Декораторы обеспечивают гибкость статически типизированных языков, позволяя вносить изменения во время выполнения, а не наследование, которое происходит во время компиляции. Однако JavaScript - это динамический язык, и возможность расширения объекта во время выполнения встроена в сам язык. Пример использования декоратора в JavaScript:
function User(name) {
    this.name = name,
    this.print = () => console.log(this.name)
}

const jane = new User ('Jane Doe')
jane.print() // 'Jane Doe'

function DecorateWithCity(user, city) {
    user.city = city
    user.print = function() {
        console.log (${this.name} from ${this.city})
    }
}

DecorateWithCity(jane, 'NewYork')
jane.print(); //'Jane Doe from New York'
#interview

💣 Как настроить отказоустойчивое хранилище данных? Дарим гайд за прохождение теста по HighLoad! 🏆 Пройди тест из 29 вопросо
💣 Как настроить отказоустойчивое хранилище данных? Дарим гайд за прохождение теста по HighLoad! 🏆 Пройди тест из 29 вопросов, проверь свой уровень знаний и получи файл “Как настроить отказоустойчивое хранилище данных“! Тест проводится в рамках курса Highload Architect 👉 Пройти тест и забрать файл: https://vk.cc/cN8YR3 Если успешно пройдешь тест, то так же сможешь забронировать место в группе по выгодной цене! 🎫 Курс можно приобрести в рассрочку Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Фабричный метод — это порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперкла
Фабричный методэто порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
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())

TOGAF — один фреймворк, чтобы управлять архитектурой. Звучит почти как легенда. Но в мире корпоративных архитекторов — это ре
TOGAF — один фреймворк, чтобы управлять архитектурой. Звучит почти как легенда. Но в мире корпоративных архитекторов — это реальный инструмент: системный, признанный, масштабируемый. Если вы работаете на уровне enterprise-решений — без TOGAF 10 сегодня сложно говорить на одном языке с бизнесом и ИТ. 📍 Приходите на бесплатный вебинар от OTUS: «TOGAF: зачем он нужен и как поможет вашей карьере?» Поговорим: — чем отличается TOGAF 10 и как его применяют на практике — какие компетенции важны архитектору нового уровня — как сертификация открывает новые карьерные треки 🎓 Вебинар ведёт сертифицированный эксперт. 💡Понравится вебинар - приходите учиться на онлайн-курс «Архитектура корпорации. Togaf 10». Курс — с доступом к материалам Open Group. Пока действует скидка по промокоду TOGAF_7 👉 Регистрируйтесь — напомним перед началом: регистрация: https://vk.cc/cN8VNU Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

11 проектов на JavaScript, которые иллюстрируют паттерны проектирования Принятие правильных решений во время написания кода для веб-приложений  —  задача не всегда простая. Справиться с премудростями программирования позволяют шаблоны проектирования  —  готовые решения для сложных задач. В статье разобрали 11 паттернов проектирования в JavaScript. Разбор поверхностный, но самое ценное — примеры реализации из реальных проектов: https://nuancesprog.ru/p/15565/ #javascript #паттерны