Skip to content

Latest commit

 

History

History
151 lines (96 loc) · 9.08 KB

PATTERNS.md

File metadata and controls

151 lines (96 loc) · 9.08 KB

1. Какие паттерны и антипатерны программирования вы знаете и какие использовали в работе.

Порождающие: Abstract Factory, Builder, Simple Factory, Static Factory, Prototyp, Factory Method

Abstract Factory Создаёт связанные или зависимые объекты без указания конкретных классов. Клиент не заботиться как создаются объекты, он только заботиться как они сочетаются друг с другом

Создание для разных ОС способов создания отображения данных.

Builder Интерфейс для производства частей сложного объекта.

Построитель запросов для query

Simple Factory Используется для создания объекта внутри метода

Static Factory Используется для создания объектов определенного типа, скрывая детали конкретной реализации создания объектов от клиента.

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

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

Структурные: Adapter, Bridge, Data Mapper, Decorator, DI, Facade, Proxy, Registry, Composite

Adapter

Используется для преобразования интерфейса одного класса в интерфейс, ожидаемый другим классом Единый интерфейс для работы с различными БД (mysql, postresql, interbase)

Может использоваться как создание своего интерфейса и использование при расширение поведения.

Bridge

Используется для отделения абстракции от её реализации так, что они могли изменяться независимо друг от друга.

Пример реализация разных сервисов с зависимостью от интерфейсов

Data Mapper

Выступает в роли посредника для двунаправленной передачи данных между постоянным хранилищем данных (часто, реляционной базы данных) и представления данных в памяти.

Пример реализация разных ORM

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

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

DI Для реализации слабосвязанной архитектуры. Чтобы получить более тестируемый, сопровождаемый и расширяемый код.

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

Proxy Использование для кеширования объектов, управления доступом, кеширования, ленивой инициализации и других сценариев

Registry Для реализации централизованного хранения объектов, часто используемых во всем приложении, как правило, реализуется с помощью абстрактного класса только c статическими методами

Поведенческие: Chain of Responsibility, Strategy, Event, Null Object, Command

Strategy Работа приложения с различными типами конфигурационных файлов (XML, YAML, PHP array), системы обработки платежей, системы для отправки уведомлений

Event Уведомление подписчиков на различные события отправка нотификации через (email, sms ...)

Hydrator, DTO

Hydrator Для преобразования данных из одного формата в другой, обычно для заполнения объектов данными из источников данных, таких как базы данных или API.

ORM (Object-Relational Mapping), Формы и валидация, Сериализация и десериализация (json, XML, cvs)

DTO Используется для передачи данных между компонентами системы или между слоями приложения

API разработка, Интеграция с внешними системами, передачи данных между клиентом и сервером

Мнемонические фразы:

АБСФП: АвтоБус Фиксирует Пассажиров Одинаково
АкваДПЛП: "Аквапарк для декорирования, прокси-фасада и легковесных мостов"
Цки-Пхонс-Шп: "Цыпленок Командует Интерпретатором и Итерирует Посредника, Хроники Наблюдают Состояния Стратегий Шаблонных Посетителей"

2. Патерны распределённых систем?

  • 2PC (Two-Phase Commit)

Фаза подготовки (Prepare Phase): Координатор отправляет запрос на подготовку (PREPARE) всем узлам

Фаза фиксации (Commit Phase): В зависимости от ответов в фазе подготовки, координатор решает, следует ли фиксировать (COMMIT) или откатывать (ROLLBACK) транзакцию и ответ об успешности

Изолированность транзакций

  • Saga

Инициирование: Глобальная транзакция инициируется запросом пользователя или внешним событием.

Запуск локальных транзакций: Сага включает локальные транзакции, каждая из которых представляет собой действие, выполняемое одним из сервисов.

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

Успешное Завершение: Если все локальные транзакции успешно завершились, сага считается успешной, и изменения фиксируются.

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

Нет изолированности

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

3. Приведи пример использования open-close принципа на паттернах

Это те паттерны которые используют интерфейс для расширения

  • Декоратор, Мост, Адаптер, Стратегия

4. Приведи пример паттернов использующие композицию

  • Строитель
  • Мост, Декоратор, компоновщик, приспособленец
  • Команда, Стратегия, Состояние, Хранитель, Интерпретатор