mdd:md2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
mdd:md2 [2014/06/02 02:50] – [Язык и понятия MD2] shpakovatmdd: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://dl.acm.org/citation.cfm?id=2480362.2480464&coll=DL&dl=GUIDE&CFID=349386071&CFTOKEN=50567512|http://dl.acm.org/citation.cfm?id=2480362.2480464&coll=DL&dl=GUIDE&CFID=349386071&CFTOKEN=50567512]]
 +
 +===== Определение =====
 +
 +Данная статья посвящена методу MD2, с помощью которого осуществляется кроссплатформенная разработка мобильных приложений. MD2, позволяет программисту построить необходимую модель и точно описать соответствующее приложение с помощью высокоуровневого предметно-ориентированного языка, созданного для лаконичного описания бизнес-приложения. При помощи этой модели автоматически генерируются приложения под Android и iOS. В отличие от подходов, использующих сетевые технологии, в данном случае не наблюдается низкий уровень абстракции и такая потеря персональных качеств платформы. MD2 была создана в тесном сотрудничестве с отраслью и предоставляет средства для разработки приложений, управляемых данными (data-driven). Приложения также могут взаимодействовать с удаленными серверами.
 +
 +===== Введение =====
 +
 +Мобильные устройства набрали огромную популярность в последнее время. 
 +Это способствует огромному количеству выпускаемых приложений для различных целей. На данный момент существует 5 основных платформ с достаточно большим количеством пользователей и для каждой из них приложение нужно разрабатывать отдельно. 
 +Такой процесс затрачивает большое количество времени и ресурсов, которые можно было бы использовать более эффективно. 
 +Таким образом, вводится понятие кросс-платформенной разработки для одновременного создания приложения на несколько платформ.
 +
 +На текущий момент популярные структуры для разработки таких кросс-платформенных приложений  либо основаны на Сетевых Технологиях, либо интерпретируют среду с использованием исходных компонент платформ. 
 +MD2 относится ко второму типу структур. 
 +Такие методы практически достигают натуральный вид для каждой платформы, но все они имеют серьезный недостаток в отношении уровня абстракции, производительности, функциональности и ошибок.
 +
 +===== Разработка с помощью моделей =====
 +
 +MDSD – использующий модели разработчик ПО работает хорошо для ПК и серверных сценариев. 
 +Идея MDSD – это представить проблему с помощью модели и сгенерировать ПО, используя эту модель. 
 +MDSD обладает способностями разработки нескольких приложений для разных платформ, которые имеют одинаковую функциональность и общее поведение. 
 +Для оценки полезности MDSD авторы статьи разработали MD2 как прототипный каркас для кросс-платформенной разработки с помощью моделей. Первоначально приложения описаны с помощью предметно-ориентированного языка, затем подвергаются трансформации и приходят к платформо-ориентированному коду.  
 +
 +Для разработки кроссплатформенных приложений отлично подходит задача разработки с помощью моделей. 
 +Автоматические трансформации генерируют исходный код из модели, определенной разработчиком. 
 +Разработчики описывают свои приложения на достаточно высоком уровне, и эти определения транслируются в код для различных мобильных платформ.
 +
 +Описанная в статье структура MD2 реализует идею в области бизнес приложений, работающих с данными. 
 +Этот метод удовлетворяет основным потребностям разработчиков бизнес приложений, что было выявлено с помощью опросов и других средств сбора данных. 
 +
 +Для бизнес приложений с данными, разработчикам необходимо:
 +
 +  - определять типы данных, иметь возможность создавать, обновлять и удалять операции для этих типов, как на устройстве, так и на сервере
 +  - имплементировать пользовательский интерфейс с различными макетами, особенно интерфейсы с таблицами и с различными основными компонентами
 +  - управлять последовательностью различных видов интерфейса
 +  - определять связь данных и проверку входных данных
 +  - реагировать на изменения состояний и событий
 +  - использовать характеристики устройства такие как GPS
 +
 +===== Обзор MD2 =====
 +
 +Разработку приложения можно разделить на три логические части и только первая из них является умственной работой для разработчиков, когда необходимо описать приложение с помощью текстовой модели. 
 +Другие две части состоят в кодогенерации и компиляции сгенерированного кода. 
 +
 +MD2 в свою очередь используется в первых двух фазах: поддерживает разработку и выполняет генерацию кода. 
 +Авторы определяют предметно-ориентированный язык для выражения приложения как высокоуровневой модели, что необходимо для выполнения первой фазы. 
 +Абстрактный синтаксис и текстовые обозначения определены и получены с помощью Xtext. 
 +Помимо синтаксического анализатора, также создается редактор, который поддерживает подсвечивание синтаксиса, дополнение кода и его проверка. 
 +
 +В момент сохранения разработчиком модели, автоматически запускается кодогенерация. 
 +Анализатор создает абстрактный синтаксис и представляет множество элементов, а также связи между ними. 
 +Также перед генерацией кода происходит предобработка для упрощения последующей генерации. 
 +Затем получаем исходный код для каждой из платформ.
 +Также создаются файлы в XML, генерируются проектные файлы и настройки.
 +
 +==== Model-View-Controller ====
 +
 +MD2 и созданные с его помощью приложения используют принцип Model-View-Controller (MVC).
 +Разделение обязанностей отображено во всех компонентах: модель приложения разделена на модель, вид и контроллер. 
 +В сгенерированных приложениях контроллер основан на системе событий и работает с действиями пользователя также как и с внутренними событиями.
 +В модели разработчики определяют, какие действия необходимо предпринять в случае, если определенное событие имеет место.
 +
 +===== Язык и понятия  MD2 =====
 +
 +Предметно-ориентированный язык это центральная часть MD2 и он создает основу для всех остальных частей.
 +Спецификация языка определяет понятия, которые в дальнейшем используются разработчиками для описания модели.
 +Таким образом, можно исследуя этот язык, можно сделать вывод о возможностях MD2, т.е. множестве характеристик.
 +
 +Одной из целей этого продукта была значительное увеличение уровня абстракции приложений сравнимая с ручной реализацией. 
 +Таким образом, язык должен описывать пространство задач приложения, а не пространство решений. 
 +Предметно-ориентированный язык, построенный для DSL, следует 4 главным принципам построения: разделение MVC компонент, декларативный стиль, соглашение прежде состава (convention over configuration) и модульность.
 +
 +Как определено общей архитектурой MVC, модель приложения разделена на три пакета, каждый для соответствующей компоненты MVC. 
 +Пакет использует только те части языка, которые связаны с данной компонентой. 
 +
 +Язык является декларативным в том смысле, что разработчик определяет //что// приложение должно выполнять, вместо того предписывать //как// выполнять это алгоритмически.
 +Таким образом, все компоненты сфокусированы на пространстве задачи. 
 +Например, модель вида описывает, как пользовательский интерфейс должен выглядеть, т.е. элементы и их композиция, а не как построить интерфейс в виде последовательности обязательных выражений.
 +
 +Где возможно, язык следует принципу соглашение прежде состава, принимая параметры по умолчанию для текущих аспектов. 
 +Благодаря модульности, текущие моменты могут быть определены только однажды и использованы еще несколько раз.
 +
 +Ниже будут представлены отрывки из просто библиотечного приложения, которое позволяет взять взаймы книгу. 
 +
 +<nowiki>
 +package org.example.library.models
 +    entity Book {
 +        title : string
 +        author : string (optional)
 +        isbn : string { name ”ISBN” }
 +    }
 +    entity LoanRequest {
 +        bookRequested : Book
 +        email : string
 +    }
 +</nowiki>
 +
 +Выше описана модель данных.
 +
 +Сущности – это главная составляющая языка.
 +Как большинство элементов они имеют имена, которые следуют сразу за ключевыми словами.
 +Они также имеют атрибуты с предопределенными типами, такими как String, Integer и Date и ссылки на другие сущности.
 +Кроме сущностей MD2 позволяет определение численных типов.
 +В общем, часть языка, которую представляют данные, предполагает, что типизированные переменные описывают модель данных приложения.
 +
 +Часть, которая называется Вид отвечает за пользовательский интерфейс приложения. 
 +
 +<nowiki>
 +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 "Request_Loan"
 +        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 
 +}
 +</nowiki>
 +
 +Язык предоставляет 2 типа элементов для Вида: индивидуальное содержимое (individual content) и контейнер. 
 +Элементы с содержимым, такие как метки, поля для форм и кнопки сгруппированы и расположены внутри элементов-контейнеров. 
 +Эти контейнеры связаны с определенными макетами (например решеточный макет), которые определяют как элементы из контейнера будут расположены. 
 +
 +Большинство элементов из части Вид могут быть параметризованы для  достижения желаемого внешнего вида.
 +Особенная черта MD2 это способность быстро создавать представления со значением по умолчанию для типа сущность.
 +Для этого разработчику необходимо добавить AutoGenerator.
 +AutoGenerator позволяет разработчикам быстро имплементировать приложение, при условии, что оно не имеет специальных особенностей.
 +
 +Компонента контроллера языка соединяет вместе модель и вид и позволяет описывать поведение приложения.
 +Она также используется для определения общих свойств, таких как изображение видов и выполнение действий.
 +Действия – центральный элемент контроллера.
 + Понятие действия – единственный элемент языка, который не подчиняется декларативному стилю, потому что действия описывают поведение приложения.
 +
 +<nowiki>
 +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 :...” 
 +}
 +</nowiki>
 +
 +Действия могут быть привязаны к событиями (11-14 строки).
 +MD2 имеет три типа событий:
 +
 +  - Те, что являются результатом непосредственно из взаимодействия с пользователем
 +  - Глобальные события
 +  - Условные события
 +
 +Центральная часть MD2 - это использующая данные составляющая структуры.
 +Связь в приложении между внутренним и удаленным ресурсами данных предоставляется с помощью поставщика информации (content provider) как соответствующего элемента языка. 
 +Локальный поставщик относится к базе данных, управляемой приложением.
 +Удаленный провайдер связан с сервером с помощью специального интерфейса (25, 31 строки).
 +Такие провайдеры определяют тип данных, который они предоставляют, который относится либо к определенной ранее в модели сущности, либо к некоторому из примитивных типов.
 +
 +Контроллер также занимается связывание модели и вида через отображение данных (data mapping).