Магистерская диссертация тема работы Разработка мобильного приложения детектирования и распознавания текстов на изображениях для платформы ios
Скачать 1.55 Mb.
|
Рисунок 9. – реальность применения шаблона проектирования MVC в iOS разработке. Cocoa MVC поощряет написание Massive View Controller, потому что контроллер настолько вовлечен в жизненный цикл View, что трудно сказать, что он является отдельной сущностью. Хотя имеется возможность переложить часть бизнес-логики и преобразования данных в Model, но когда доходит до пердачи работы во View, это становится не очень возможным. В большинстве случаев вся ответственность View состоит в том, чтобы отправить действия к контроллеру. В итоге все заканчивается тем, что View Controller становится делегатом и источником данных, а также местом запуска и отмены серверных запросов и, в общем-то, всего чего угодно. На самом деле, использование MVC не так уж плохо, пока дело не доходит до Unit тестов. Так как View Controller тесно связана с View, ее становится трудно тестировать, и приходится идти изощренным путем, заменяя View Mock-объектами (в объектно-ориентированном программировании — тип объектов, реализующих заданные аспекты моделируемого программного окружения) и имитируя их жизненный цикл, а также писать код View Controller таким образом, чтобы бизнес-логика была по максимуму отделена от кода view layout. Кроме того, написанный таким образом код сложно использовать в других приложениях, так как все элементы тесно связаны и разделить их очень тяжело. 2) MVP Model-View-Presenter (MVP) — шаблон проектирования, производный от MVC, который используется в основном для построения пользовательского интерфейса. Элемент Presenter в данном шаблоне берёт на себя функциональность посредника (аналогично контроллеру в MVC) и отвечает за управление событиями пользовательского интерфейса так же, как в других шаблонах обычно отвечает представление. Рисунок 10.– шаблон проектирования MVP. MVP — шаблон проектирования пользовательского интерфейса, который был разработан для облегчения автоматического модульного тестирования и улучшения разделения ответственности в презентационной логике (отделения логики от отображения): • Модель (англ. Model) — хранит в себе всю бизнес-логику, при необходимости получает данные из хранилища. • Представление (англ. View) — реализует отображение данных (из Модели), обращается к Presenter за обновлениями. • Представитель (англ. Presenter) — реализует взаимодействие между моделью и представлением. С точки зрения MVP, подклассы UIViewController на самом деле есть View, а не Presenter. Это различие обеспечивает превосходную тестируемость, которая идет за счет скорости разработки, потому что вы должны связывать вручную данные и события именно между View и Presenter. MVP является первым паттерном, выявляющим проблему сборки, которая происходит из-за наличия трех действительно отдельных слоев. Так как нам не нужно, чтобы View знала о Model, выполнять сборку в презентующей View Controller (который на самом деле View) неправильно, следовательно, это нужно сделать в другом месте. Например, можно создать сервис Router, который будет отвечать за выполнение сборки и презентацию View-to-View. Эта проблема возникает не только в MVP, ее также нужно решать во всех последующих паттернах. Признаки хорошей архитектуры для MVP: • распределение: большая часть ответственности разделена между Presenter и Model, а View ничего не делает; • тестируемость: отличная, мы можем проверить большую часть бизнес-логики благодаря бездействию View; • простота использования; Применение MVP в iOS означает превосходную тестируемость и много кода. 3) MVVM Шаблон Model-View-ViewModel (MVVM) — применяется при проектировании архитектуры приложения. Первоначально был представлен сообществу Джоном Госсманом (John Gossman) в 2005 году как модификация шаблона Presentation Model. MVVM ориентирован на современные платформы разработки. Шаблон MVVM делится на три части: • Модель (англ. Model), так же, как в классической MVC. • Представление (англ. View) — это графический интерфейс, то есть окно, кнопки и т. п. • Модель Представления (англ. ViewModel) является, с одной стороны, абстракцией Представления, а с другой, предоставляет обёртку данных из Модели, которые подлежат связыванию. |