Главная страница
Навигация по странице:

  • 3.6. Описание runtime возможностей программных платформ

  • 3.7. Динамическое описание модели

  • 3.8. Описание разработанного демонстрационного мобильного приложения

  • 4. ЗАКЛЮЧЕНИЕ

  • СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  • Диссертация. "Технология создания кроссплатформенных приложений с динамическим формированием структуры и контента"


    Скачать 1.73 Mb.
    Название"Технология создания кроссплатформенных приложений с динамическим формированием структуры и контента"
    АнкорДиссертация
    Дата22.02.2022
    Размер1.73 Mb.
    Формат файлаpdf
    Имя файлаDissertation.pdf
    ТипДокументы
    #369742
    страница4 из 5
    1   2   3   4   5

    Способ обращения к полю объекта
    Затраченное
    процессорное время
    Обращение через ключ к структуре NSDictionary
    3641173
    Обращение через стандартный метод Objective-C объекта
    -
    (id)valueForKey:(NSString *)key
    3400599
    Обращение через runtime с помощью метода id object_getIvar(id, Ivar) напрямую
    371471
    Обращение через runtime с помощью метода id object_getIvar(id, Ivar) через собственый метод объекта
    1125425
    Обращение через runtime с помощью метода id object_getIvar(id, Ivar) через статический метод
    1840793
    !45

    (id)getValueForKey:(NSString *)key; и возвращает значение, ассоциированное с указанным именем поля. Метод является аналогом стандартного метода
    —(id)valueForKey:(NSString *)key, однако работает заметно быстрее потому, что сразу производит поиск необходимого значения поля непосредственно у объекта класса, вместо предварительного поиска по методам [11].
    !46

    3.6. Описание runtime возможностей программных платформ
    Так как основная логика создания описания структуры и содержания контента располагается на серверной стороне (клиентское приложение должно быть максимально лишено собственной "логики", что позволяло бы обеспечить заданный уровень динамичности), в первую очередь необходимо было разобраться, каким образом будут описываться создаваемые модель данных используемой предметной области. Язык программирования серверной платформы Python был выбран не случайно: в силу "врожденной" динамической типизации создание описаний классов, добавление их объектам методов и полей является свойством платформы, что определенно облегчило работу. Программная платформа Google AppEngine, которая обеспечивает функционирование разработанного в рамках настоящей работы веб-приложения, предоставляет NoSQL хранилище данных [8], по своей структуре соответствующее полноценному ORM решению, и предоставляет все возможности для хранения как описаний моделей, так и экземпляров классов отдельной взятой модели. Встроенный метод type(name, bases, dict) позволяет объявить новый тип, указав имя, набор базовых классов, а также словарь для объявления полей и методов класса. Runtime-generated классы в настоящей работе наследуются от ndb.Model - класса, обеспечивающего хранение объектов в рамках NoSQL хранилища на платформе Google AppEngine. В настоящем проекте реализовано динамическое создание классов, а так же объектов этих классов и их непосредственное хранение в NoSQL хранилище Google AppEngine - Cloud
    Datastore.
    Динамическое runtime- создание классов на платформе iOS на языке
    Objective-C доступно с использованием методов упомянутой выше библиотеки
    . Objective-C является Open-Source (не смотря на авторство компании Apple) языком [13, 18], который по своему
    !47
    устройству изначально является runtime-ориентированным: например, решение о вызове того или иного метода (отсылке сообщения, в данном конкретном случае), будет принято непосредственно во время исполнения, нежели чем во время компиляции (compiling) или связывания (linking). Это позволяет динамически определять метод, который будет вызван при посылки того или иного сообщения, а также, например, подменять реализацию любого метода своим собственным. По факту, Objective-C
    Runtime - Runtime Library, написанная на C и Assembler, которая добавляет
    Объектно-ориентированную сущность и возможности языку C, что в конечном счете формирует Objective-C, то есть производит подгрузку классов, обеспечивает создание dispatch таблиц методов и перенаправление сообщений. Все создаваемые в рамках настоящей работы динамически классы являются подклассами класса Entity (в свою очередь является подклассом
    NSManagedObject, использующимся для удобного хранения создаваемых объектов в локальном ORM хранилище платформы iOS), который предоставляет удобные методы для прямого доступа к полям. В настоящем проекте в рамках разработанного прототипа мобильного приложения реализовано динамическое создание классов по описанной серверным приложением модели данных, определение на их основе структуры ORM базы данных, с помощью которой осуществляется их непосредственное хранение.
    Также в настоящей работе одной из задач являлось проведение анализа возможности реализации подобного решения и построения динамической runtime архитектуры на других лидирующих [7] мобильных платформах:
    Android (Java) и Windows Phone OS (C#, .NET).
    Программная платформа .NET, используемая для разработки мобильных приложений для мобильной операционной системы Windows
    Phone содержит стандартную библиотеку System.Reflection.Emit [6], которая позволяет определять assemblies - классы с заданной моделью данных в
    !48
    момент исполнения - и регистрировать их в текущем runtime-окружении для создания экземпляров. Из отличительных особенностей библиотеки можно выделить возможность генерации исполняемых файлов с сгенерированными классами, которые можно использовать повторно либо в других приложениях. Платформа позволяет определять динамические классы, конфигурировать набор типизированных полей и добавлять методы, а так же настраивать на основе созданных типов модель и структуру локальной ORM базы данных (использующей LINQ), что обеспечивает хранение создаваемых экземпляров.
    Программная платформа Android с использованием языка Java так же предусматривает возможность динамического создания классов в соответствии со структурой модели. Однако класс получается скомпилированным - то есть полноценная динамика невозможна, но это и не рассматривалось в рамках данной работы. В соответствии с поставленными задачами - динамически созданного скомпилированного класса будет достаточно. За динамическую компиляцию отвечает появившийся в Java 1.6 пакет javax.tools [15]. Он предоставляет API доступа к JavaCompiler, который позволяет скомпилировать класс во время исполнения и в комбинации с ClassLoader-ом может предоставить доступ к созданию экземпляров, вызову методов для них, а также доступу к полям. Не смотря на то, что Android не предоставляет стандартных ORM решений для хранения объектов, можно либо использовать open-source решения (такие, как, например, ORMLite [14]), либо использовать простую обертку над встроенным API для работы с SQLite. Подобное решение в настоящее время применяется в большом Enterprise решении - Hibernate [9], которое в свою очередь основано на JavaAssist [10] - библиотеке, которая является программной оберткой над ClassLoader в комбинации с инструментами из javax.tools.
    !49

    3.7. Динамическое описание модели
    При описании модели необходимо указать уникальное в пределах одного приложения имя модели, а также указать набор атрибутов (имя-тип), которыми будут обладать экземпляры описанного класса.
    Текущая реализация динамического описания модели предусматривает следующие типы атрибутов объекта:
    1. строковое значение (string);
    2. целое число (long);
    3. нецелое число (double);
    4. дата и время (datetime);
    5. булевое значение (boolean);
    6. изображение (image - хранится как ссылка на изображение в файловом хранилище).
    Отдельного внимания требует вопрос обновления модели, так как именно этот немаловажный аспект является "узким местом" любой универсальной кросс-платформенной системы. В рамках настоящей работы предусмотрены следующие варианты изменения созданной модели (с допущениями):
    1. добавление атрибута;
    2. удаление атрибута;
    3. изменение типа атрибута: варианты преобразований значений описаны в таблице 6;
    4. изменение имени атрибута: при этом будет произведено создание
    !50
    атрибута с новым значением, копирование значений, а затем удаление старого атрибута.
    Таблица 6
    Варианты преобразований значений атрибутов при смене типа string long double datetime boolean image string попытк а преобра зования
    , либо 0
    попытка преобра зования, либо 0.0
    попытка преобразов ания по
    ISO-8601
    [5], либо
    NULL
    True, если значение
    НЕ
    NULL, в противно м случае
    - False
    NULL
    long строковое представл ение, либо
    NULL
    приведе ние типов, либо 0.0
    преобразов ание unix timestamp, либо NULL
    True, если больше
    0, в противно м случае
    - False
    NULL
    double строковое представл ение, либо
    NULL
    приведе ние типов, либо 0
    NULL
    True, если больше
    0, в противно м случае
    - False
    NULL
    datetime представл ение по
    ISO-8601, либо
    NULL
    unix timesta mp, либо 0 0.0
    False
    NULL
    !51

    За каждым описанием модели закрепляется номер версии, а так же список изменений, которые необходимо произвести клиенту, чтобы привести модель в актуальное состояние. При изменении типа для каждой пары типов предлагается выбор способа преобразования значений в соответствии с таблицей 6. При синхронизации структуры и содержания контента, клиентское приложение выполняет описанные преобразования модели (при несовпадении версий) и приводит ее в актуальное состояние инкрементально.
    Это позволяет безопасно выполнять преобразования в фоновом режиме - при прерывании, миграция продолжится при следующей синхронизации
    (например, при запуске приложения) с последней успешно примененной версии.
    boolean
    NULL 1, если
    True и
    0, если
    False, либо
    False
    1, если
    True и
    0, если
    False, либо
    False
    NULL
    NULL
    image
    NULL
    0 0.0
    NULL
    False
    !52

    3.8. Описание разработанного демонстрационного мобильного
    приложения
    Одной из задач настоящей работы была разработка нативного мобильного приложения, способного изменять структуру и содержание контента без необходимо повторной компиляции и сборки.
    !53
    Рисунок 14. Разработанное мобильное приложение

    Было разработано демонстрационное мобильное приложение на платформе iOS, которое в полной мере соответствует предложенной в данной работе технологии разработки кросс-платформенных приложений (рис. 14).
    При первом запуске необходимо указать идентификатор разработанного в рамках веб-конструктора приложения, чья структура и содержание контента будет синхронизированы мобильным клиентом. Модель данных клиентского решения полностью совпадает с моделью данных серверной части
    (Приложение 1), что в последствии позволяет модифицировать клиентское приложение при синхронизации данных с сервером. Синхронизация происходит в фоном режиме при запуске приложения, а так же при получении уведомления об изменении структуры или модели данных.
    Уведомления рассылаются всем установленным мобильным приложениям, после получения которых они самостоятельно скачивают с сервера актуальные настройки конфигурации. На рис. 15 изображена диаграмма последовательностей взаимодействия клиентского приложения с серверной частью.
    !54

    !55
    Рисунок 15. Диаграмма последовательностей взаимодействия мобильного приложения с серверной частью

    4. ЗАКЛЮЧЕНИЕ
    В настоящей работе предложена и реализована архитектура технологии разработки кросс-платформенных приложений с динамической структурой и содержанием контента.
    Обзор существующих решений выделяет три основных способа разработки кросс-платформенный приложений: нативная разработка (в зависимости от конкретной мобильной платформы), HTML5 разработка и гибридное решение, комбинирующее оба подхода. Анализ показывает, что нативные приложения превосходят HTML5 и гибридные типы разработок, однако все кросс-платформенные аналоги такого вида предусматривают непосредственное разработку мобильного приложения, то есть написание программного кода. Уникальность же настоящей работы заключается в том, что для создания мобильного приложения, ориентированного на контент, не требуется наличие навыков программирования: структура и содержание контента полностью настраиваются в созданном веб-приложении - конструкторе.
    Выбранный основополагающий архитектурный паттерн представляет собой собственную реализацию комбинированного решения, учитывающая плюсы Model-View-Controller и Model-View-ViewModel подходов к проектированию и разработке мобильных приложений. Использование данного комбинированного решения позволяет добиться высокого уровня а б с т р а к ц и и , ч то д е л а е т отд е л ь н ы е ком п о н е н т ы п ол н о с т ь ю взаимозаменяемыми и переиспользуемыми. Структура Binding обеспечивает связи между элементами разработанной модели и является, по сути, центральным ядром системы.
    В рамках настоящего проекта также разработана программная платформа, позволяющая сторонним разработчикам размещать исполняемые скрипты, результаты выполнения которых могут быть использованы как
    !56
    источники контекста данных, доступных для отображения посредством связывания.
    Отдельное внимание было удаление runtime-генерации классов и конфигурации встроенного локального хранилища в соответствии с заданным описанием модели данных. Использование именно runtime- создаваемых классов дает заметный прирост в производительности в сравнении с использованием структуры данных “словарь”, как способа представления экземпляров модели. Проведенный анализ вариантов реализации подобного подхода на других мобильных платформах показывает возможную масштабируемость решения. Немаловажным является возможность изменения описания модели, а также предусмотренные варианты миграции. Реализованный метод устанавливает высокий уровень гибкости модели, что немаловажно при разработке динамических систем такого типа.
    Разработанное демонстрационное мобильное клиентское приложение доказывает работоспособность предложенной архитектуры и описанной технологии создания кросс-платформенных приложений.
    Дальнейшее развитие технологии подразумевает создание клиентских приложений на основные мобильные платформы (Android, Windows Phone).
    Задача облегчается тем фактом, что для функционирования системы достаточно разработать только одно приложение, которое бы реализовывало все аспекты предложенной технологии. В силу динамичности решения, такое приложение может самостоятельно подстраиваться под модель данных и структуру контента, которые впоследствии могут изменяться без необходимо сти повторной компиляции или с борки. Так же предусматривается разработка встраиваемого компонента (SDK), который сторонние разработчики мобильных приложений смогут добавлять в свои проекты для быстрого прототипирования динамических модулей.
    !57

    СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
    1. An Era of growth: The cross-platform report [Электронный ресурс] / nielsen аналитическая компания. Режим доступа http://www.nielsen.com/us/en/
    reports/2014/an-era-of-growth-the-cross-platform-report.html, по запросу
    (дата обращения 02.03.2014)
    2. Brands' mobile apps aren't just about the discounts [Электронный ресурс] / eMarketer аналитиче ская компания. Режим до ступа http://
    www.emarketer.com/Article/Brands-Mobile-Apps-Arent-Just-About-
    Discounts/1010100, свободный (дата обращения 02.03.2014)
    3. Cocoa Core Competencies. Model-View-Controller [Электронный ресурс] /
    Apple компания разработчик мобильной ОС. Режим доступа https://developer.apple.com/library/ios/documentation/general/conceptual/
    devpedia-cocoacore/MVC.html, свободный (дата обращения 11.03.2014)
    4. clock [Электронный ресурс] / CPlusPlus - портал описания функций языка
    C++. Режим доступа http://www.cplusplus.com/reference/ctime/clock/, свободный (дата обращения 27.04.2014)
    5. Date and Time formats [Электронный ресурс] / W3C - организация- разрабочтик стандарта WWW. Режим доступа http://www.w3.org/TR/
    NOTE-datetime, свободный (дата обращения 18.04.2014)
    6. Emitting Dynamic Methods and Assemblies [Электронный ресурс] / MSDN портал описание библиотек платформы .NET. Режим доступа http://
    msdn.microsoft.com/en-us/library/8ffc3x75(v=vs.110).aspx, свободный (дата обращения 10.05.2014)
    7. Gartner Says Annual Smartphone Sales Surpassed Sales of Feature Phones for the First Time in 2013 [Электронный ресурс] / Gartner аналитическая
    !58
    компания. Режим доступа http://www.gartner.com/newsroom/id/2665715, свободный (дата обращения 28.03.2014)
    8. Google Developers. Python NDB Overview [Электронный ресурс] / Google компания разработчик ПО. Режим доступа https://developers.google.com/
    appengine/docs/python/ndb/, свободный (дата обращения 15.04.2014)
    9. Hibernate [Электронный ресурс] / Hibernate компания разработчик
    Enterptise решений для языка Java. Режим доступа http://hibernate.org, свободный (дата обращения 15.05.2014)
    10. Javaassist [Электронный ресурс] / Javaassist портал описаня библиотеки.
    Режим доступа http://www.csg.ci.i.u-tokyo.ac.jp/

    chiba/javassist/, свободный
    (дата обращения 15.05.2014)
    11. Key-Value Coding Programming Guide. Accessor Search Implementation
    Details [Электронный ресурс] / Apple компания-разработчик мобильной
    ОС. Режим доступа https://developer.apple.com/library/ios/documentation/
    Cocoa/Conceptual/KeyValueCoding/Articles/SearchImplementation.html, свободный (дата обращения 15.04.2014)
    12. Native, HTML5, or Hybrid: Understanding Your Mobile Application
    Development options [Электронный ресурс] / salesforce компания разработчик облачных решений для бизнеса. Режим доступа https://
    d e v e l o p e r . s a l e s f o r c e . c o m / p a g e /
    Native,_HTML5,_or_Hybrid:_Understanding_Your_Mobile_Application_Dev elopment_Options, свободный (дата обращения 02.04.2014)
    13. Open Source Reference Library [Электронный ресурс] / Apple компания- разработчик мобильной ОС. Режим доступа http://opensource.apple.com/, свободный (дата обращения 25.04.2014)
    !59

    14. OrmLite - Lightweight Object Relational Mapping (ORM) Java Package
    [Электронный ресурс] / OrmLite библиотека для языка Java. Режим доступа http://ormlite.com, свободный (12.05.2014)
    15. Package javax.tools [Электронный ресурс] / Java Platform SE 7 портал описания библиотек языка Java. Режим доступа http://docs.oracle.com/
    javase/7/docs/api/javax/tools/package-summary.html, свободный (дата обращения 15.05.2014)
    16. Presentation Model [Электронный ресурс] / Martin Fowler. Режим доступа http://martinfowler.com/eaaDev/PresentationModel.html, свободный (дата обращения 10.03.2014)
    17. The Future of Mobile Development: HTML5 Vs. Native Apps [Электронный ресурс] / Business Insider аналитический портал. Режим доступа http://www.businessinsider.com/html5-vs-native-apps-for-mobile-2013-6?
    op=1, свободный (дата обращения 05.04.2014)
    18. Understanding the Objective-C Runtime [Электронный ресурс] / Colin
    Wheeler. Режим доступа http://cocoasamurai.blogspot.ru/2010/01/
    understanding-objective-c-runtime.html, свободный (дата обращения
    25.04.2014)
    19. WPF Apps with the Model-View-ViewModel Design Pattern [Электронный ресурс] / MSDN Magazine портал для разработчиков. Режим доступа http://
    msdn.microsoft.com/en-us/magazine/dd419663.aspx, свободный (дата обращения 10.03.2014)
    !60

    ПРИЛОЖЕНИЕ 1
    1   2   3   4   5


    написать администратору сайта