.NET Tutorial

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

SOLID, слоистая и чистая архитектура, CQRS, MediatR, DDD, Event Sourcing, микросервисы, Saga, Outbox, отказоустойчивость и паттерны GoF.

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

  1. 1 SOLID: расшифровка, реальные примеры нарушений на .NET? S — Single Responsibility: у класса одна причина для изменения (один «владелец» требований). Нарушение — «божественный» OrderService на 3000 строк. O — Open/Closed: откр… Junior8 мин
  2. 2 DRY, KISS, YAGNI — в чём смысл и где грань? DRY (Don't Repeat Yourself) — каждое знание (бизнес-правило, формула, решение) должно иметь одно авторитетное представление в системе. Речь о дублировании знаний, а не с… Junior6 мин
  3. 3 Слоистая архитектура: Presentation → Application → Domain → Infrastructure? Код делится на слои по ответственности: Presentation (API, UI — принять запрос, вернуть ответ), Application (сценарии использования, оркестрация, транзакции), Domain (би… Junior5 мин
  4. 4 Clean Architecture vs Onion Architecture — отличия? Onion (Jeffrey Palermo, 2008), Hexagonal / Ports & Adapters (Alistair Cockburn, 2005) и Clean (Robert Martin, 2012) — вариации одной идеи: бизнес-логика в центре, инфрас… Middle6 мин
  5. 5 CQRS: Command/Query разделение, зачем и когда? CQS (Бертран Мейер) — на уровне методов: метод либо изменяет состояние (command), либо возвращает данные (query), но не то и другое сразу. CQRS (Command Query Responsibi… Middle6 мин
  6. 6 Mediator pattern (MediatR) — как работает, плюсы и минусы? Паттерн Mediator — объекты общаются не напрямую, а через посредника, что уменьшает связанность «многие-ко-многим». MediatR — популярная .NET-библиотека: mediator.Send(re… Middle5 мин
  7. 7 Repository + Unit of Work pattern — смысл и критика? Repository — абстракция коллекции доменных объектов: «дай заказ по id», «сохрани заказ». Скрывает детали хранения от бизнес-логики. Unit of Work — отслеживает изменения … Middle6 мин
  8. 8 Domain-Driven Design: Entity, Value Object, Aggregate, Domain Event? DDD — подход к сложным доменам: модель кода отражает язык и правила бизнеса. Стратегическая часть: Ubiquitous Language (единый язык с экспертами), Bounded Context (грани… Middle8 мин
  9. 9 Event Sourcing — что это и когда применять? Event Sourcing: вместо хранения текущего состояния храним последовательность событий, которые к нему привели (AccountOpened, MoneyDeposited, MoneyWithdrawn). Текущее сос… Senior7 мин
  10. 10 Microservices vs Monolith — когда что выбирать? Монолит — одно развёртываемое приложение с общей БД. Просто разрабатывать, тестировать, деплоить и отлаживать; транзакции ACID «бесплатно». Проблемы начинаются с ростом:… Senior6 мин
  11. 11 API Gateway pattern — зачем нужен? API Gateway — единая точка входа для внешних клиентов в систему микросервисов. Клиент знает один адрес, а шлюз маршрутизирует запросы к нужным сервисам. Типичные функции… Middle6 мин
  12. 12 Saga pattern для распределённых транзакций (Choreography vs Orchestration)? Проблема: бизнес-операция затрагивает несколько сервисов со своими БД (заказ → резерв на складе → оплата → доставка). Одной ACID-транзакции нет, 2PC плохо масштабируется… Senior7 мин
  13. 13 Outbox pattern — зачем нужен при работе с очередями и БД? Проблема dual write: нужно изменить БД и отправить сообщение в брокер. Это две разные системы — атомарно не получится: упадёт между шагами → либо данные есть, а события … Middle7 мин
  14. 14 Circuit Breaker, Retry, Bulkhead — паттерны отказоустойчивости? В распределённой системе зависимости будут отказывать: сеть, перегрузка, деплой. Задача — не допустить каскадного отказа и восстанавливаться автоматически. Timeout — не … Middle6 мин
  15. 15 Что такое Event-Driven Architecture? EDA — архитектура, где компоненты взаимодействуют через события: факты о произошедшем («заказ оформлен»), которые публикуются без знания о получателях. Производитель и п… Middle5 мин
  16. 16 GoF паттерны, которые реально встречаются в .NET: Factory, Decorator, Strategy, Observer, Proxy? Factory / Factory Method / Abstract Factory — инкапсулируют создание объектов: IHttpClientFactory, ILoggerFactory, DbProviderFactory, фабрики в DI (AddScoped(sp => ...))… Middle6 мин
  17. 17 Что такое Strangler Fig — постепенная миграция legacy? Strangler Fig (Мартин Фаулер, по аналогии с фикусом-душителем) — постепенная замена legacy-системы: новая система растёт вокруг старой, забирая функциональность по частя… Middle6 мин