Принципы и Паттерны
Разработка платформы 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: Изоляция ресурсов и сервисов для минимизации влияния сбоев одного компонента на остальные части системы, повышая общую устойчивость.