Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Design Patterns
Code

Шаблоны проектирования для Cocoa: MVC и MVVM

by
Length:MediumLanguages:

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Шаблоны проектирования делают код вашего приложения более модульным и легким, когда дело доходит до исправления ошибок и изменений. В этой статье вы узнаете о шаблонах проектирования MVC (Model-View-Controller) и MVVM (Model-View-ViewModel).

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

Ознакомьтесь с этими недавними публикациями Барта Джейкобса о MVC и MVVM, чтобы узнать больше об этих шаблонах проектирования и о выборе между ними.

Коллекция объектов определенного [архитектурного паттерна] в приложении иногда называется слоем, например, слой модели. - Apple

Без лишних слов давайте рассмотрим некоторые шаблоны проектирования, которые вы можете использовать в своем следующем приложении.

MVC (модель-вид-контроллер)

Это наиболее часто используемый шаблон в разработке Cocoa Touch, а также мой личный фаворит. Этот шаблон проектирования эффективно организует ваш код по трем категориям (или слоям): Модель, Представление и Контроллер.

Как это работает и почему я должен это использовать?

С помощью этого шаблона вы можете вносить изменения в один слой, не затрагивая другие слои шаблона. Например, если вам нужно изменить базу данных, вы просто удалите модель и замените ее, не редактируя представление или контроллер. Или, если вы хотите изменить внешний вид представления, вам не нужно беспокоиться о путанице в коде базы данных. Это называется «разделением задач», и это облегчает отладку, поддержку и повторное использование вашего кода.

Кроме того, это шаблон дизайна, который рекомендуется самим Apple, и это норма в сообществе разработчиков iOS. Если вы только начинаете, я настоятельно рекомендую придерживаться этого паттерна. Вы можете опробовать различные шаблоны проектирования позже в своей карьере разработчика Cocoa.

Слои и обязанности

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

Model-View-Controller

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

  • Модель. Этот слой отвечает только за данные и их форму в том виде, в каком они отображаются в вашем приложении. Слой Controller может вносить изменения в данные приложения, уведомляя модель. Модель не несет ответственности ни за что, в том числе за то, как данные показываются пользователю или кто или что использует данные.
  • Представление: представление отвечает за представление данных - только за то, как пользователь видит и взаимодействует с данными. Это может включать в себя повторно используемые ячейки, таблицы и другие элементы пользовательского интерфейса, которые ничего не знают о данных или о том, как они обрабатываются. Данные передаются в элементы представления контроллером.
  • Контроллер: Контроллер - звезда шоу. Он приносит данные из модели, а затем передает их в представление для отображения пользователю. Это единственный слой между моделью и представлением, который может вызвать некоторые проблемы, которые мы рассмотрим позже в этой статье. Контроллер обычно реализован в ViewController.swift, и он отвечает за прослушивание ввода и изменение модели по мере необходимости.

Нужно иметь в виду, что вы не должны втискивать слишком много обязанностей ни в один из этих слоев, потому что это противоречит цели иметь шаблон дизайна!

Кроме того, если вы не будете поддерживать чистоту и прозрачность связей между слоями, вы получите грязное и не поддерживаемое приложение, несмотря на использование шаблона проектирования MVC! В частности, убедитесь, что вы не позволяете представлению и модели взаимодействовать напрямую. Эти взаимодействия должны происходить исключительно через контроллер.

MVVM (модель-вид-вид-модель)

Хотя шаблон проектирования Model-View-Controller является довольно распространенным и должен работать в большинстве случаев, он имеет свой собственный набор проблем и недостатков. Из-за этого у нас есть другой шаблон проектирования под названием MVVM, который обозначает Model-View-ViewModel.

MVC великолепен, так зачем мне MVVM?

Ну, есть одна серьезная проблема, о которой вы должны знать. Как вы видели в предыдущем разделе, слой «Контроллер» является единственным слоем между представлением и моделью, поэтому неудивительно, что люди злоупотребляют этим слоем. Он может показаться самым легким, потому что он избегает изменения других уровней, но в конечном итоге приводит к раздутому контроллеру и сложному в обслуживании коду.

Это привело к тому, что в некоторых кругах MVC дали причудливое прозвище «Massive-View-Controller».

Архитектурный паттерн MVVM, заимствованный разработчиками Cocoa из Microsoft, может помочь в решении этой проблемы с массивными контроллерами представления. Хотя это не так распространено в разработке для iOS, как MVC, оно все чаще используется для устранения недостатков MVC.

Слои и обязанности

Давайте посмотрим на различные уровни и их обязанности в MVVM. (Вы, вероятно, должны заметить, что в сообществе Cocoa нет никаких официальных указаний по использованию этих слоев.)

Вот краткая диаграмма, демонстрирующая слои этого архитектурного паттерна и их связи друг с другом.

Model-View-ViewModel

Если вы подумаете об этом, вы увидите, что, хотя представления и контроллеры являются отдельными уровнями в шаблоне проектирования MVC, они очень тесно связаны. Поэтому в MVVM мы просто берем View и Controller и объединяем их в один слой.

Давайте сравним каждый слой с его аналогом в шаблоне MVC.

  • (Вид) Контроллер: Этот слой, обычно известный как Вид, тесно связан с Контроллером. Настолько, что они даже не разделены на разные слои! Представление связывается только с Контроллером, но Контроллер связывается с ViewModel и Представлением. View и Controller выполняют те же задачи, что и в MVC, но отличие состоит в том, что некоторые задачи, которые были переданы Controller (в MVC), теперь обрабатываются промежуточным уровнем, ViewModel, для предотвращения неправильного использования Controller. Представление по-прежнему обрабатывает отображение данных для пользователя, а контроллер отвечает на пользовательские события и связывается с остальными слоями шаблона.
  • ViewModel: этот слой на самом деле не содержит каких-либо «представлений» сам по себе, но вместо этого обрабатывает логику отображения представлений - обычно называемую логикой представления. Это включает в себя создание настраиваемых форматирующих и обрабатываемых строк для отображения, а также фактическое сокращение чисел, которые будут показаны пользователю на основе данных на уровне модели.
  • Модель: Модель не сильно отличается от слоя модели в паттерне MVC. Как мы видели ранее, Модель обрабатывает данные и вносит изменения в эти данные только в том случае, если она получает обновления от слоя ViewModel. Он ничего не знает о том, кто использует данные, что они делают с ними или как пользователь видит данные.

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

Заключение

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

Конечно, архитектурный шаблон, который вы используете для своего приложения, полностью зависит от вас, и это зависит от типа приложения, которое вы пытаетесь разработать. Однако, если вы новичок в разработке для iOS, я все равно настоятельно рекомендую придерживаться шаблона проектирования MVC, потому что он по-прежнему является наиболее распространенным в разработке Cocoa.

Пока вы еще здесь, обязательно ознакомьтесь с некоторыми другими нашими уроками и статьями здесь на Envato Tuts +!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.