🗂

MVC Паттерн в Разработке

Jul 11, 2024

MVC Паттерн в Разработке

Введение в MVC

  • Почему MVC: Это самый важный паттерн для разработчиков.
  • Цель лекции: Дать теоретические знания для самостоятельного применения на практике.
  • Аудитория: Разработчики, особенно пишущие на Java, но применимо к другим языкам.
  • Темы не включены: Примеры кода.

Истоки и Проблемы

  • История: MVC возник как способ изолировать разные слои приложения для лучшей управляемости и масштабируемости.
  • Проблемы: Работа с разными аспектами (интерфейс, данные, логика) в одном классе приводит к увеличению его объема и сложности.

Слоистая Архитектура

  • Основная идея: Деление приложения на слои с изоляцией контекста.
  • Преимущества: Понятный и предсказуемый способ расширения и командной разработки.
  • Количество слоев: Обычно от 3 до 5.
  • Направление импорта: Сверху вниз; бизнес-логика никогда не зависит от интерфейса.
  • Преимущество изоляции: Проще повторно использовать классы нижних слоев в других контекстах.

MVC в Деталях

  • Главные слои: View, Controller, Model.
  • Расшифровка:
    • View: Отвечает за представление и взаимодействие пользователя.
    • Controller: Обрабатывает действия пользователя и взаимодействует с моделью.
    • Model: Управляет данными и бизнес-логикой.

Пример веб-приложения (Таймер)

  • Действие пользователя: Запуск таймера через интерфейс.
  • Процедура:
    • View фиксирует действия и передает их контроллеру.
    • Controller управляет логикой и взаимодействует с моделью.
    • Model сохраняет данные в хранилище.
    • Controller обновляет View.

Вариации MVC

  • Популярные вариации: MVVM, MVP и другие.
  • Совет: Доверяйте фреймворкам и следуйте их гайдлайнам.

Пример Java Backend Приложения (Регистрация пользователя)

  • Слои:
    • Servlet/Controller: Принимает запросы и валидирует данные.
    • Service: Выполняет бизнес-логику (регистрация пользователя).
    • DAO/Repository: Инкапсулирует работу с базой данных.
  • Data Transfer Object (DTO): Используется для передачи данных между слоями и наружу.
  • Пример схемы: Показан полный цикл обработки запроса от клиента до БД и обратно.

Обработка ошибок в MVC

  • Пример: Регистрация пользователя с неуникальным email.
  • Процедура: Ловим исключение в DAO, перебрасываем в сервис, и затем в контроллер для формирования ошибки ответа.

Реальная Структура Проекта

  • Горизонтальная структура: Плоская структура пакетов по слоям (Controller, Service, Repository, Model).
  • Проблемы: Нарушение принципов группировки классов по связанности (Low Coupling, High Cohesion).
  • Вертикальная структура: Пакеты по сущностям/доменам (User, Booking, Flight).
  • Общие классы: Выделяются в отдельные пакеты (commons, utils).
  • Эволюция структуры: Структура должна адаптироваться по мере роста и изменений проекта.

Советы по управлению структурой

  • Эволюция пакетов: Пакеты должны изменяться и рефакториться по мере разработки.
  • Основные принципы:
    • Сначала горизонтальная структура.
    • Переход на вертикальную по мере роста сущностей.
    • Выделение общих/базовых классов и утилит в отдельные пакеты.
    • Использование специализированных подходов (например, DDD) для сложных доменов.

Совместимость с другими архитектурами

  • MVC может использоваться внутри микросервисов, Event-Driven подходов и т.д.

Рекомендуемая Литература

  • Software Architecture Patterns от O'Reilly
  • Domain-Driven Design от Eric Evans (глава про модули)
  • Refactoring: Improving the Design of Existing Code от Martin Fowler
  • Вопрос на StackOverflow: "Horizontal and Vertical Split"

Заключение

  • Рекомендации для изучения Java:
    • Дорожная карта Java (Java Roadmap)
    • Telegram канал и сообщество студентов
    • YouTube канал с лекциями на другие темы
    • Поддержка на платформе Boosty

Вопросы и Ответы

  • Обработка ошибок в контроллере: Возможны разные варианты, в зависимости от контекста.

  • Работа команды: Разные команды могут работать над разными слоями или независимыми частями системы.

  • Логика в контроллере: Должна быть минимальной; сложная логика в сервисах.

  • Рефакторинг структуры: Постоянная эволюция структуры пакетов в зависимости от текущих требований.

  • Совет: Не бойтесь рефакторинга и адаптации структуры до требований проекта.