Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| mdd:md2 [2014/06/02 02:47] – [Язык и понятия MD2] shpakovat | mdd:md2 [2026/08/29 07:59] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Cross-Platform Model-Driven Development of Mobile Applications with MD2 ====== | ||
| + | Henning Heitkötter University of Münster, Münster, Germany | ||
| + | Tim A. Majchrzak University of Münster, Münster, Germany | ||
| + | Herbert Kuchen University of Münster, Münster, Germany. | ||
| + | ACM, 2013. | ||
| + | [[http:// | ||
| + | |||
| + | ===== Определение ===== | ||
| + | |||
| + | Данная статья посвящена методу MD2, с помощью которого осуществляется кроссплатформенная разработка мобильных приложений. MD2, позволяет программисту построить необходимую модель и точно описать соответствующее приложение с помощью высокоуровневого предметно-ориентированного языка, созданного для лаконичного описания бизнес-приложения. При помощи этой модели автоматически генерируются приложения под Android и iOS. В отличие от подходов, | ||
| + | |||
| + | ===== Введение ===== | ||
| + | |||
| + | Мобильные устройства набрали огромную популярность в последнее время. | ||
| + | Это способствует огромному количеству выпускаемых приложений для различных целей. На данный момент существует 5 основных платформ с достаточно большим количеством пользователей и для каждой из них приложение нужно разрабатывать отдельно. | ||
| + | Такой процесс затрачивает большое количество времени и ресурсов, | ||
| + | Таким образом, | ||
| + | |||
| + | На текущий момент популярные структуры для разработки таких кросс-платформенных приложений | ||
| + | MD2 относится ко второму типу структур. | ||
| + | Такие методы практически достигают натуральный вид для каждой платформы, | ||
| + | |||
| + | ===== Разработка с помощью моделей ===== | ||
| + | |||
| + | MDSD – использующий модели разработчик ПО работает хорошо для ПК и серверных сценариев. | ||
| + | Идея MDSD – это представить проблему с помощью модели и сгенерировать ПО, используя эту модель. | ||
| + | MDSD обладает способностями разработки нескольких приложений для разных платформ, | ||
| + | Для оценки полезности MDSD авторы статьи разработали MD2 как прототипный каркас для кросс-платформенной разработки с помощью моделей. Первоначально приложения описаны с помощью предметно-ориентированного языка, затем подвергаются трансформации и приходят к платформо-ориентированному коду. | ||
| + | |||
| + | Для разработки кроссплатформенных приложений отлично подходит задача разработки с помощью моделей. | ||
| + | Автоматические трансформации генерируют исходный код из модели, | ||
| + | Разработчики описывают свои приложения на достаточно высоком уровне, | ||
| + | |||
| + | Описанная в статье структура MD2 реализует идею в области бизнес приложений, | ||
| + | Этот метод удовлетворяет основным потребностям разработчиков бизнес приложений, | ||
| + | |||
| + | Для бизнес приложений с данными, | ||
| + | |||
| + | - определять типы данных, | ||
| + | - имплементировать пользовательский интерфейс с различными макетами, | ||
| + | - управлять последовательностью различных видов интерфейса | ||
| + | - определять связь данных и проверку входных данных | ||
| + | - реагировать на изменения состояний и событий | ||
| + | - использовать характеристики устройства такие как GPS | ||
| + | |||
| + | ===== Обзор MD2 ===== | ||
| + | |||
| + | Разработку приложения можно разделить на три логические части и только первая из них является умственной работой для разработчиков, | ||
| + | Другие две части состоят в кодогенерации и компиляции сгенерированного кода. | ||
| + | |||
| + | MD2 в свою очередь используется в первых двух фазах: поддерживает разработку и выполняет генерацию кода. | ||
| + | Авторы определяют предметно-ориентированный язык для выражения приложения как высокоуровневой модели, | ||
| + | Абстрактный синтаксис и текстовые обозначения определены и получены с помощью Xtext. | ||
| + | Помимо синтаксического анализатора, | ||
| + | |||
| + | В момент сохранения разработчиком модели, | ||
| + | Анализатор создает абстрактный синтаксис и представляет множество элементов, | ||
| + | Также перед генерацией кода происходит предобработка для упрощения последующей генерации. | ||
| + | Затем получаем исходный код для каждой из платформ. | ||
| + | Также создаются файлы в XML, генерируются проектные файлы и настройки. | ||
| + | |||
| + | ==== Model-View-Controller ==== | ||
| + | |||
| + | MD2 и созданные с его помощью приложения используют принцип Model-View-Controller (MVC). | ||
| + | Разделение обязанностей отображено во всех компонентах: | ||
| + | В сгенерированных приложениях контроллер основан на системе событий и работает с действиями пользователя также как и с внутренними событиями. | ||
| + | В модели разработчики определяют, | ||
| + | |||
| + | ===== Язык и понятия | ||
| + | |||
| + | Предметно-ориентированный язык это центральная часть MD2 и он создает основу для всех остальных частей. | ||
| + | Спецификация языка определяет понятия, | ||
| + | Таким образом, | ||
| + | |||
| + | Одной из целей этого продукта была значительное увеличение уровня абстракции приложений сравнимая с ручной реализацией. | ||
| + | Таким образом, | ||
| + | Предметно-ориентированный язык, построенный для DSL, следует 4 главным принципам построения: | ||
| + | |||
| + | Как определено общей архитектурой MVC, модель приложения разделена на три пакета, | ||
| + | Пакет использует только те части языка, которые связаны с данной компонентой. | ||
| + | |||
| + | Язык является декларативным в том смысле, | ||
| + | Таким образом, | ||
| + | Например, | ||
| + | |||
| + | Где возможно, | ||
| + | Благодаря модульности, | ||
| + | |||
| + | Ниже будут представлены отрывки из просто библиотечного приложения, | ||
| + | |||
| + | < | ||
| + | package org.example.library.models | ||
| + | entity Book { | ||
| + | title : string | ||
| + | author : string (optional) | ||
| + | isbn : string { name ”ISBN” } | ||
| + | } | ||
| + | entity LoanRequest { | ||
| + | bookRequested : Book | ||
| + | email : string | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Выше описана модель данных. | ||
| + | |||
| + | Сущности – это главная составляющая языка. | ||
| + | Как большинство элементов они имеют имена, которые следуют сразу за ключевыми словами. | ||
| + | Они также имеют атрибуты с предопределенными типами, | ||
| + | Кроме сущностей MD2 позволяет определение численных типов. | ||
| + | В общем, часть языка, которую представляют данные, | ||
| + | |||
| + | Часть, которая называется Вид отвечает за пользовательский интерфейс приложения. | ||
| + | |||
| + | < | ||
| + | package org.example.library.views | ||
| + | |||
| + | FlowLayoutPane MainView (vertical) { | ||
| + | Label bookHeader { | ||
| + | text ”Book” | ||
| + | styleHeaderStyle | ||
| + | } | ||
| + | |||
| + | AutoGenerator bookInfoPart { | ||
| + | contentProvider bookProvider | ||
| + | } | ||
| + | | ||
| + | Button loadBookBtn (”Load_book_from_ISBN”) | ||
| + | Label loanHeader { | ||
| + | text " | ||
| + | style HeaderStyle | ||
| + | } | ||
| + | | ||
| + | TextInput loanEMail { | ||
| + | label ”Email_address” | ||
| + | tooltip ”Please_provide_your_email_...” | ||
| + | } | ||
| + | |||
| + | Button loanBtn (”Loan_this_book”) | ||
| + | } | ||
| + | ... % Infoview | ||
| + | TabbedPane TabbedView { | ||
| + | MainView −> Main | ||
| + | InfoView (tabTitle ”Info”) | ||
| + | } | ||
| + | |||
| + | style HeaderStyle { | ||
| + | fontSize 20 | ||
| + | textStyle bold | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Язык предоставляет 2 типа элементов для Вида: индивидуальное содержимое (individual content) и контейнер. | ||
| + | Элементы с содержимым, | ||
| + | Эти контейнеры связаны с определенными макетами (например решеточный макет), | ||
| + | |||
| + | Большинство элементов из части Вид могут быть параметризованы для | ||
| + | Особенная черта MD2 это способность быстро создавать представления со значением по умолчанию для типа сущность. | ||
| + | Для этого разработчику необходимо добавить AutoGenerator. | ||
| + | AutoGenerator позволяет разработчикам быстро имплементировать приложение, | ||
| + | |||
| + | Компонента контроллера языка соединяет вместе модель и вид и позволяет описывать поведение приложения. | ||
| + | Она также используется для определения общих свойств, | ||
| + | Действия – центральный элемент контроллера. | ||
| + | | ||
| + | |||
| + | < | ||
| + | package org.example.library.controllers | ||
| + | |||
| + | main { | ||
| + | appName ”Library_Application” | ||
| + | ... % version information etc. | ||
| + | startView TabbedView.Main | ||
| + | onInitialized init | ||
| + | } | ||
| + | |||
| + | action CombinedAction init { | ||
| + | actions bindEvents mapFields | ||
| + | } | ||
| + | |||
| + | action CustomAction bindEvents { | ||
| + | bind action loadBook on MainView.loadBookBtn.onTouch | ||
| + | bind action sendLoanRequest on MainView.loanBtn.onTouch | ||
| + | } | ||
| + | |||
| + | action CustomAction mapFields { | ||
| + | map MainView.loanEMail to loanProvider.email | ||
| + | bind validator RegExValidator | ||
| + | % simplified and erroneous regex | ||
| + | ( regEx ”[ a−z ]+@ [ a−z ] + \\.[ a−z ]+ ”) | ||
| + | on MainView.loanEMail | ||
| + | } | ||
| + | |||
| + | ... % actions loadBook, sendLoanRequest | ||
| + | contentProvider Book bookProvider { | ||
| + | providerType someServer | ||
| + | filter first where Book.isbn equals | ||
| + | MainView.bookInfoPart [Book.isbn] | ||
| + | } | ||
| + | |||
| + | contentProvider LoanRequest loanProvider { | ||
| + | providerType someServer | ||
| + | } | ||
| + | |||
| + | remoteConnection someServer { | ||
| + | uri ”http : | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Действия могут быть привязаны к событиями (11-14 строки). | ||
| + | MD2 имеет три типа событий: | ||
| + | |||
| + | - Те, что являются результатом непосредственно из взаимодействия с пользователем | ||
| + | - Глобальные события | ||
| + | - Условные события | ||
| + | |||
| + | Центральная часть MD2 - это использующая данные составляющая структуры. | ||
| + | Связь в приложении между внутренним и удаленным ресурсами данных предоставляется с помощью поставщика информации (content provider) как соответствующего элемента языка. | ||
| + | Локальный поставщик относится к базе данных, | ||
| + | Удаленный провайдер связан с сервером с помощью специального интерфейса (25, 31 строки). | ||
| + | Такие провайдеры определяют тип данных, | ||
| + | |||
| + | Контроллер также занимается связывание модели и вида через отображение данных (data mapping). | ||