Уважаемые читатели, рады представить вам книгу “Разработка мобильных приложений на C# для iOS и Android” от уже хорошо известного вам автора и эксперта в Xamarin, Вячеслава Черникова из компании Binwell. Без долгих прелюдий передаю слово автору.
Добрый день, уважаемый хабрачитатель. За последние несколько лет я написал довольно много статей и руководств по разработке мобильных приложений с помощью C# и фреймворка Xamarin, однако изначально все эти руководства и часть статей задумывались как главы моей первой книги, которая, наконец, увидела свет. Будучи собраны в одно целое (и там очень много того, что ранее не публиковалось!), материалы книги позволят вывести процесс разработки мобильных приложений на качественно новый уровень – начиная с выбора инструмента и подготовки документации, а заканчивая автоматизацией процесса разработки и решением частых задач. Данная книга задумывалась как гармоничное дополнение к тем материалам по Xamarin, которые уже есть на русском и английском языках, раскрывая такие вопросы, как проектирование, архитектура, создание скелета (каркаса) проекта, все то, что обычно остается за кадром большинства книг и учебных курсов.
В книге подробно и с большим количеством примеров кода раскрываются следующие темы: сравнение нативных и кроссплатформенных инструментов на примере Xamarin, ReactNative, PhoneGap, Qt и Flutter; проектирование и техническая документация для кода; архитектура и структура проекта, раскладываем все по местам; Mobile DevOps и автоматизация сборки, тестирования, поставки и мониторинга; практические советы на каждый день.
Книгу можно купить на сайте издательства «ДМК Пресс» (самый дешевый вариант!) и интернет-магазинах Лабиринт, My-Shop.ru, Flip.kz, Oz.by, а также других интернет-магазинах, их количество увеличивается по мере распространения книги.
Для затравки (и с согласия издателя) приведу кусочек Главы 3.
3. Архитектура приложения
Итак, мы уже познакомились с тем, как работает Xamarin.Forms и как провести техническое проектирование своими силами. Теперь у нас есть понимание о модели предметной области, и пришло время переходить к архитектуре и структуре решения – как мы будем распределять наши классы по папкам, чтобы потом было легко находить нужный код.
3.1. Многослойный MVVM
В мобильных приложениях традиционно применяется многослойная архитектура с отделением слоев доступа к данным, слоя бизнес-логики и слоя отображения пользовательского интерфейса.
Рис. 3.1. Классическая трехуровневая архитектура
Так как родным для Xamarin.Forms является архитектурный паттерн MVVM, то именно его рекомендуется использовать в мобильных приложениях. MVVM описывает связь View (обычно это экраны приложения — Page), ViewModel и Model.
Рис. 3.2. Паттерн MVVM
Таким образом, типовая архитектура приложения на базе Xamarin.Forms будет следующей:
Рис. 3.4. Базовая архитектура приложения на Xamarin.Forms
В рамках данной книги мы остановимся на представленной архитектуре, так как она является классической для Xamarin.Forms. Более подробно каждый из модулей будет описан в следующих разделах.
3.2. Декомпозиция по слоям
Если вспомнить основы, то программа — это набор алгоритмов и данных. Мобильные приложения не стали исключением. Архитектура позволяет отделить алгоритмы и данные различного предназначения друг от друга.
В мобильных приложениях условно можно выделить следующие виды алгоритмов:
- управление поведением и внешним видом компонентов пользовательского интерфейса (user interface, UI);
- логика взаимодействия с пользователем и бизнес-сценарии (business logic, BL);
- логика получения, хранения и преобразования данных (data access layer, DAL);
- платформенная функциональность, не связанная с пользовательским интерфейсом (platform).
- Есть также множество дополнительных алгоритмов вроде инициализации приложения или дополнительных вспомогательных классов и расширений (Extensions), но их не так просто классифицировать, так как они специфичны для проектов, команд и выбранных библиотек.
- Ниже показана структура пустого проекта на Xamarin.Forms. Дальше важно понимать, в какие папки складывать файлы, чтобы код сохранял простоту.
Рис. 3.5. Структура пустого проекта на Xamarin.Forms
Если же переходить к тому, как поддерживать код “в тонусе” (минимальный технический долг), то важным для команды является следование единым соглашениям. Ниже мы рассмотрим пример разделения классов по папкам, который будет соответствовать описанной архитектуре.
Но для начала вспомним о данных. Здесь важно понимать, о каких из них будет идти речь. Есть данные, которые приходят с сервера (data transfer object, dto), а есть те, что обрабатываются в приложении (models, entities, data objects). Отметим, что удобнее сразу получать готовые данные со слоя DAL, чтобы дальше с ними было проще работать. Подробнее об этом мы поговорим в разделе 3.5.
Также в мобильных приложениях нет такого количества данных, чтобы требовалось делать толстые модели и «размазывать» бизнес-логику по ним (подход из больших корпоративных систем). Достаточно обычных POCO (Plain Old CLR Object) без какой-либо логики. Итак, все готовые данные приходят со слоя DAL, там же внутри спрятаны классы DTO, о которых не знают другие слои. Ниже показано различие между «толстыми» моделями и POCO-объектами.
Рис. 3.6. Отличие «толстой» Model от POCO-объекта
Далее мы будем придерживаться следующих обозначений:
- Data Objects – плоские (POCO) модели данных, с которыми будет дальше работать бизнес-логика.
- Data Services – сервисы получения, преобразования и хранения данных.
- Business Services – сервисы обработки данных и бизнес-сценарии.
- Platform Services – сервисы прямого доступа к платформенной функциональности.
Буду благодарен за ваши отзывы и комментарии, оставайтесь на связи!
Автор: Александр Гуреев