Введение 5
1.1 Диаграмма потоков данных
1.2 Программирование потоков данных
1.2.1 История
1.2.2 Основные определения
1.3 Реактивные приложения
1.3.1 Отзывчивость
1.3.2 Устойчивость
1.3.3 Гибкость
1.3.4 Основанность на сообщениях
1.4 Современное состояние проблемы разработки реактивных
приложений
2 Проблема исследования 18
3 Цели и задачи исследования 19
4 Основная часть 20
4.1 WRF платформа
4.2 RAML
4.2.1 Языки разметки графов
4.2.2 Общие сведения о RAML
4.2.3 Как работает RAML
4.2.4 Преимущества RAML
4.2.5 RAML vs CSharp Code
34.2.6 Структурные элементы WRF
4.2.7 Узел
4.2.8 Граф
4.3 Разработка простого приложения с использованием WRF . . 50
4.3.1 Задача
4.3.2 Проектирование
4.3.3 Реализация
4.3.4 Результаты
4.4 Приложение для Online шопинга разработанное с использованием WRF
5 Результаты 62
6 Список литературы
Организации работающие в разных сферах независимо друг от друга ищут шаблоны и подходы для создания программного обеспечения,
которое выглядит и ведет себя одинаково. Эти системы являются более
надежными, более устойчивыми, более гибкими и лучше приспособлены к современным требованиям.
Требования к приложениям резко изменились за последние годы. Всего несколько лет назад большое приложение могло содержать десятки
серверов, секунды времени отклика, часы автономного обслуживания и
гигабайты данных. Сегодня приложения разворачиваются на всем: от
мобильных устройств до облачных кластеров, на которых работают тысячи многоядерных процессоров. Пользователи ожидают миллисекунды
времени отклика и сто процентов времени безотказной работы, а данные
измеряются в петабайтах. Вчерашние архитектурные решения, используемые для создания программного обеспечения, просто не удовлетворяют сегодняшним требованиям.
Реактивные системы более гибкие, слабосвязанные и масштабируемые. Это облегчает их разработку и адаптацию к изменениям. Они значительно более терпимы к ошибкам и сбоям, очень отзывчивы и предоставляют пользователям эффективную. интерактивную обратную связь.
Новые требования к приложениям повлекли за собой появление технологий позволяющих разрабатывать реактивные системы. Стали популярными интерфейсы программирования приложений для реактивного программирования такие как ReactiveX [1, 2, 9, 10, 11, 12, 13, 14], использующий наблюдаемые потоки и реализованный под огромное количество языков, такие как C Sharp, Java, JavaScript, C++ и многие другие. Этот
и похожие инструменты позволяют представить приложение как набор
объектов, обменивающихся между собой данными, и превратить структуру приложения в асинхронный ориентированный граф данных. Однако, текстовое представление не дает прозрачного понимания о взаимодействии объектов в приложении и о её структуре в целом. Визуальные представление, в свою очередь, позволяют удобно и быстро конфигурировать и изменять графовую структуру приложения. Похожую задачу
решает Windows Presentation Foundation, решение от Microsoft, ориентированная на создание клиентских приложений. Подробнее об этом решении можно почитать на официальном сайте MSDN или в книге Pro WPF 4.5 in C Sharp [4].
В данной работе описывается технология предназначенная для создания реактивных приложений Windows, и предоставляющая визуальный интерфейс, позволяющий создавать элементы реактивной системы для приложений, перетаскивая элементы управления из панели элементов
и устанавливая свойства в окне «Свойства». Также данная технология
предоставляет декларативную модель для описание реактивной системы
благодаря использованию расширяемого языка разметки для реактивных приложений (XRAML)
• Проведен анализ большого объема реактивных приложений
• Проведен анализ подходов к визуальному программированию, как
к возможному решению проблемы возрастающей сложности поддержки и разработки больших реактивных приложений
• Разработаны прототипы унифицированной модели программирования для создания реактивных приложений
• Разработана итоговая унифицированная модель программирования для создания реактивных приложений, включающая в себя
– Декларативный язык разметки основанный на XML, который
упрощает создание структурного графа реактивного приложения
– Интеграцию с Visual Studio. Основные компоненты интеграции:
∗ Визуальный конструктор
∗ Поддержка расширения файлов
∗ Расширенное выделение синтаксиса, функции завершения
кода IntelliSense и интуитивную навигацию по коду в редакторе кода, созданном на основе платформы компилятора .NET («Roslyn»)
∗ Различные спецификации
[1] Duncan K. DeVore, Sean Walsh, Brian Hanafee: Reactive Application
Development (2014)
[2] Lee Campbell: Introduction to Rx: A step by step guide to the Reactive
Extensions to .NET (2012)
[3] Ivan Morgillo, Sasa Sekulic, Fabrizio Chignoli: Grokking ReactiveX,
(2016)
[4] Matthew MacDonald: Pro WPF 4.5 in C Sharp: Windows Presentation
Foundation in .NET 4.5 (2012)
[5] Jonas Bon´er, Co-Founder and CTO Lightbend, Inc.: Reactive
Microservices Architecture (2016)
[6] Markus Eisele, Enterprise Advocate, Lightbend, Inc.: Developing
Reactive Microservices (2016)
[7] Jeff Smith: Reactive Machine Learning Systems (2016)
[8] Julien Richard-Foy: Play Framework Essentials (2014)
[9] Andre Staltz: The introduction to Reactive Programming you’ve been
missing (2014)
[10] The Couchbase documentation: Mastering Observables
[11] Russell Elledge: Reactive Programming in Java 8 With RxJava (2014)
[12] Tomasz Kowalczewski: 33rd Degree Reactive Java (2014)
63[13] Bodil Stokke: What Every Hipster Should Know About Functional
Reactive Programming (2014)
[14] Erik Meijer: Your Mouse is a Database (2012)
[15] McGraw, J.: The VAL Language: Description and Analysis (1982)
[16] Agha, G.: Actors: a Model of Concurrent Computation in Distributed
Systems, Series in Artificial Intelligence (Jun 1985)
[17] Arvind, D.: IEEE Xplore - Dataflow architectures and multithreading.
Annual review of computer science (1986)
[18] Browne, J., Hyder, S., Dongarra, J.: IEEE Xplore - Visual programming
and debugging for parallel computing (1995)
[19] Cann, D.: Retire Fortran? A debate rekindled (1991)
[20] Dennis, J.B.: Data Flow Supercomputers. Computer 13(11), 48-56
(1980)
[21] Feo, J., Cann, D.: A report on the Sisal language project (1990)
[22] Halbwachs, N., Caspi, P., Raymond, P., Pilaud, D.: The synchronous
data flow programming language LUSTRE. Proceedings of the IEEE
79(9), 1305-1320 (Sep 1991)
[23] Johnston, W., Hanna, J.: Advances in dataflow programming languages.
ACM Computing Surveys (CSUR) (2004)
64[24] Kahn, G.: The Semantics of a Simple Language for Parallel
Programming. In Information Processing ґ Proceedings of the IFIP
Congress (1974), pp. 471-475. 74: pp. 471-475 (1974)
[25] McGraw, J.: The VAL Language: Description and Analysis (1982)