Перейти к основному содержимому

Принципы и Паттерны

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

Основные Принципы

  • SOLID: Пять ключевых принципов объектно-ориентированного проектирования, направленных на улучшение структуры и качества кода:

    • S: Принцип единственной ответственности (Single Responsibility Principle) — каждый модуль или класс должен отвечать только за одну задачу.
    • O: Принцип открытости/закрытости (Open/Closed Principle) — классы и модули должны быть открыты для расширения, но закрыты для модификации.
    • L: Принцип подстановки Барбары Лисков (Liskov Substitution Principle) — объекты дочернего класса должны быть взаимозаменяемыми с объектами базового класса без изменения поведения программы.
    • I: Принцип разделения интерфейсов (Interface Segregation Principle) — интерфейсы должны быть специфичными и предоставлять только необходимые методы, чтобы избежать ненужных зависимостей.
    • D: Принцип инверсии зависимостей (Dependency Inversion Principle) — высокоуровневые модули не должны зависеть от низкоуровневых; оба должны зависеть от абстракций.
  • DRY (Don't Repeat Yourself): Минимизация дублирования кода и логики для упрощения поддержки, улучшения читаемости и уменьшения ошибок.

  • KISS (Keep It Simple, Stupid): Предпочтение простых и понятных решений вместо сложных и перегруженных архитектур.

  • YAGNI (You Aren't Gonna Need It): Разработка только необходимой функциональности на текущем этапе, избегая преждевременной реализации и усложнения кода.

Архитектурные Паттерны

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

  • CQRS (Command Query Responsibility Segregation): Разделение операций записи (команды) и чтения (запросы), что повышает производительность и упрощает масштабируемость системы.

    • Команды управляют изменениями данных.
    • События используются для обновления интерфейсов в реальном времени.
    • OData применяется для эффективного чтения данных.
  • CRUD (Create, Read, Update, Delete): Базовый подход к управлению данными, когда разделение операций чтения и записи не требуется.

  • Saga: Паттерн для управления распределенными транзакциями, используемый в модуле workflow. Обеспечивает координацию и целостность данных при выполнении сложных бизнес-процессов. Workflow выступает как оркестратор, контролируя выполнение задач между микросервисами.

  • Event Sourcing: Хранение всех изменений состояния системы в виде событийной последовательности. Это позволяет отслеживать изменения и восстанавливать состояние системы, а также анализировать исторические данные.

  • Repository: Паттерн для абстрагирования доступа к данным, который изолирует бизнес-логику от технических деталей хранения данных, обеспечивая легкость тестирования и расширения.

  • Event-Driven Architecture: Использование событийной архитектуры для асинхронного взаимодействия между сервисами через event bus. Это повышает масштабируемость системы и уменьшает связанность между компонентами.

  • Asynchronous Messaging: Паттерн асинхронного обмена сообщениями через очереди, обеспечивающий независимость компонентов и повышение устойчивости системы.

  • Outbox Pattern: Обеспечение согласованности данных при выполнении транзакций и взаимодействии между микросервисами.

  • Factory: Паттерн для создания объектов, который скрывает сложную логику и упрощает расширение и поддержку кода.

  • Dependency Injection: Инверсия управления зависимостями, что упрощает тестирование, делает код более модульным и уменьшает связанность компонентов.

  • Distributed Cache: Использование распределенного кэша для повышения производительности и уменьшения нагрузки на базу данных, обеспечивая быстрый доступ к данным.

  • API Gateway: Централизованная точка входа для управления запросами к микросервисам, обеспечивающая упрощенную маршрутизацию и управление доступом.

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

  • Circuit Breaker: Паттерн для предотвращения каскадных сбоев и перегрузок сервисов путем отслеживания и ограничения неисправных запросов.

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