С какими архитектурными паттернами и стилями вы работали?

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

Ответ

1. Многослойная архитектура (Layered Architecture) / MVC

  • Классическое разделение на Presentation (Controller), Business Logic (Service), Data Access (Repository) слои.
  • Пример в Spring MVC:

    @Controller
    public class UserController { // Presentation Layer
    @Autowired
    private UserService userService; // Business Logic Layer
    
    @GetMapping("/users")
    public String getUsers(Model model) {
        model.addAttribute("users", userService.getAllUsers());
        return "users";
    }
    }

2. Чистая архитектура (Clean Architecture) / Гексагональная (Ports & Adapters)

  • Разделение на Domain (сущности и бизнес-правила), Application (use cases), Infrastructure (внешние сервисы, БД) слои.
  • Позволяет изолировать бизнес-логику от фреймворков и деталей реализации.

3. Микросервисная архитектура

  • Разработка небольших, независимо развертываемых сервисов.
  • Использовал Spring Cloud (Eureka для Service Discovery, Feign для REST-клиентов, Spring Cloud Gateway для API Gateway).
  • Общение через REST API, асинхронные сообщения (Kafka).

4. MVVM (Model-View-ViewModel)

  • Применял в Android-разработке с Jetpack компонентами (LiveData, ViewModel, Data Binding).

Критерии выбора: Масштаб проекта, требования к тестируемости, скорость изменений, необходимость распределенной системы.