Шаблон проектирования MVC

Перед прочтением данной статьи настоятельно рекомендую ознакомиться с этой статьей про принципы объектно-ориентиванного программирования SOLID.

Что такое шаблон проектирования и зачем он нужен. Предположим вы разрабатываете андроид приложение, где одним из главных компонентов является Activity, класс, который отвечает за пользовательское взаимодействие. Без применения шаблона проектирования многие новички пишут в этом классе все (от обращений в сеть и базу данных до логики обработки этих данных и отображения пользователю).

Здесь в первую очередь нарушется первый принцип ООП SOLID, S — принцип единой ответственности. Каждый класс должен делать лишь то, что он должен, не больше и не меньше. Тогда возникает вопрос, а что должен делать тот или иной класс и как, собственно, разделить ответственности?

На этот вопрос отвечает как раз шаблон проектирования MVC (как пример). Давайте посмотрим что о нем написано в википедии.

Model-View-Controller (MVC, «Модель-Представление-Контроллер», «Модель-Вид-Контроллер») — схема разделения данных приложения, пользовательского интерфейса и управляющей логики на три отдельных компонента: модель, представление и контроллер — таким образом, что модификация каждого компонента может осуществляться независимо.

  • Модель (Model) предоставляет данные и реагирует на команды контроллера, изменяя свое состояние.
  • Представление (View) отвечает за отображение данных модели пользователю, реагируя на изменения модели.
  • Контроллер (Controller) интерпретирует действия пользователя, оповещая модель о необходимости изменений.

Значит весь код, который новичок пишет в одном классе можно и нужно разбить на 3 отдельных класса. В модели будут происходить запросы в сеть или в базу данных, при получении команды от контроллера и передавать эти данные в представление для отображения пользователю. Т.е. пользователь, предположим, ввел данные для поиска, эти данные через контроллер перейдут в модель, получив ответ от сервера новые данные через представление будут отображены пользователю.

MVC-Process.png

Данный шаблон проектирования не совсем подходит для Андроид (об этом в следующей статье). Если коротко, то в андроиде сложно разделять одни элементы как контроллеры, а другие как представление и поэтому в случае андроида один и тот же класс Activity будет частично и тем и другим.

Шаблон MVC хорошо подходит например для игровых приставок, где пользователь взаимодействует с контроллером (джойстиком) нажимая определенные кнопки, а отображение данных происходит на экране монитора. Здесь есть явное разделение ответственности. В мобильном же устройстве и ввод и отображение происходит посредством одного и того же элемента (если мы говорим о сенсорных мобильных устройствах, а не кнопочных аналогах).

Также этот шаблон хорошо подходит например если вы разрабатываете игру для настольного компьютера. Тогда весь ввод будет осуществляться через клавиатуру (как пример), а отображение через монитор.

Тогда у нас будут эти 3 класа, для ввода данных, для обработки и для отображения. Каждый класс отвечает за одно действие и не зависит от другого. Это не только упрощает саму разработку, но и позволяет покрывать тестами каждый слой (класс), как плюс можно переиспользовать одни классы для других слоев.

Итого 100500 строчек кода в одном классе разбились на 3 отдельных класса по 100 строк, что довольно упрощает как чтение этого кода, так и поддержку.

Можно рассмотреть пример игры в коде.

Вот так может выглядеть класс представление. Он знает лишь о модели и взаимодействует лишь с ней.

Так может выглядеть класс Контроллер. В нем методы обработки клавиатуры, которые обновляют данные в модели.

А так может выглядеть класс Модель. При каждом изменении позиции вызывается метод у класса представление чтобы отрисовать персонажа по новым координатам.

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

Запись опубликована в рубрике Программирование Android, Программирование Java. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *