Какие архитектурные паттерны вы знаете и где они применяются?

«Какие архитектурные паттерны вы знаете и где они применяются?» — вопрос из категории Софт-скиллы, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

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

  • MVC (Model-View-Controller): Разделяет приложение на три компонента. Model (данные и бизнес-логика), View (представление, UI), Controller (обрабатывает ввод, управляет Model и View).

    // Spring MVC Controller пример
    @Controller
    @RequestMapping("/users")
    public class UserController { // Controller
        @Autowired
        private UserService userService; // Model слой
    
        @GetMapping
        public String getUsers(Model model) { // Model - контейнер для данных в View
            model.addAttribute("users", userService.findAll());
            return "user-list"; // Имя View (шаблона)
        }
    }
  • Layered Architecture (Многослойная архитектура): Стандартное разделение на Presentation, Service, Repository/DAO, Database слои.
  • Repository/DAO: Абстрагирует доступ к данным, инкапсулируя логику работы с хранилищем (реализуется через JpaRepository в Spring Data JPA).
  • Singleton: Гарантирует существование только одного экземпляра класса (по умолчанию все Spring бины — синглтоны в рамках их контекста).
  • Observer/Event-Driven: Позволяет объектам подписываться на события и реагировать на них (реализуется через ApplicationEvent и @EventListener в Spring).

Использование этих паттернов повышает тестируемость, поддерживаемость и масштабируемость кода.