Введение 8
1. Анализ предметной области 12
1.1. Мобильные приложения в современном мире 12
1.2. Сравнение Progressive Web Apps (PWA) с сайтом и
мобильным приложением 13
2. Архитектура приложения 21
2.1. Выбор фреймворка 21
2.2. Выбор языка программирования 30
2.3. Использование облачных сервисов 31
2.5. Лямбда функции 35
2.6. FireBase для упрощения разработки 37
2.7. Использование service worker-ов в приложении 39
2.8. Тестирование 40
2.9. CI/CD Доставка пользователям 43
3. Используемые технологии построения приложения 45
3.1. React 45
3.2. Redux 46
3.3. React-Router 48
3.4. Самописный D&D 48
3.5. Самописный Virtualized list 48
3.6. Typescript 49
3.7. Webpack 49
3.8. Git 51
3.9. Git flow 52
4. Разработка кроссплатформенного PWA приложения 55
4.1. Вход/регистрация 55
4.2. Форма регистрации 56
4.3. Оповещения об ошибках 57
4.4. Классическое представление списков 58
4.5. Поиск по спискам 59
4.6. Список задач 60
4.7. Архив готовых дел 62
4.8. Выход из учетной записи 63
4.9. Работа с большими списками 64
4.10. Хранение данных локально 65
4.11. Расширенный функционал приложения 66
4.12. Работа с канбан листом 67
4.13. Общий вид приложения 71
5. Безопасность приложения 73
ЗАКЛЮЧЕНИЕ 75
Список литературы 77
Приложение А 80
Приложение Б 81
Приложение В 82
Приложение Г 83
Приложение Д 84
Приложение «Bullet Journal Application» служит для облегчения работы с ежедневными задачами при помощи визуализации подхода со схожим названием.
Оно предоставляет возможность пользователям, вместо ручного ввода списка дел и управления им, при составлении нового каждый период (день/неделю/месяц/год), автоматизированный процесс.
В данном подходе управлением делами предполагается распоряжаться делами схоже, как и во всеобще известных подходах, таких как SCRAM и KANBAN: имеется список дел для каждого периода, из которых составляется список дел для более мелких периодов. Подобные Agile методологии очень эффективный подход в управлении небольшими командами.
Из схожего у нас имеется общий пул дел, из которых мы можем выбрать те, что наиболее приоритетны для следующего периода.
В «Bullet Journal Application» подходе у нас имеется список глобальных дел на год, которые мы можем разбить на более мелкие по месяцам, либо привязать каждое дело к определенному месяцу. У каждого месяца соответственно имеется похожая структура с глобальными задачами на месяц, которые могут быть привязаны к неделям и из них уже выбираются ежедневные задачи. Каждая вложенная в период задача не обязательно должна презентовать часть какой-то более глобальной задачи.
Так же к глобальным задачам могут относиться повторяющиеся задачи, как занятия споротом, которые могут быть глобальной задачей на год и в будущем перейти на следующий год, так и повторяющиеся задачи на небольшой период времени, такие как чтение какой-то определенной книги, обучение на курсах или хобби.
Каждое дело, которое не завершено в текущем периоде переносится в следующий период или отменяется, если оно уже не актуально, как например, пропущенная встреча. При большом списке дел такие переносы на бумаге могут занимать достаточно много времени и со временем начинают надоедать. Здесь то и вступает в действие наше приложение, которое позволит пользователю не беспокоится о ручном переносе дел, а сосредоточиться на их выполнении, более качественном описании и поддержке, а так же в случае просрочки напомнит и предупредит о приближающихся важных встречах. Так же для просроченных дел в последующих периодах будет добавлена пометка, чтобы пользователь видел проблемные задачи.
Так же в ручном оформлении подобных журналов возникают проблемы с оформлением периодических дел, поддержку которых будет осуществлять наше приложение и выводить статистику по повторяющимся делам, чтобы пользователю лучше и понятнее был виден прогресс в них. Это, на мой взгляд, будет повышать мотивацию в их выполнении, если пользователь будет видеть, что у него начались проблемы с ними, либо будет сигнализировать и том, что стоит пересмотреть распорядок дня, чтобы было больше времени на повседневные занятия.
В итоге мы получаем приложение помощник для людей, которые хотят структурировать свой распорядок дня, но у них нет времени на изучение принципов составления подобных журналов и их поддержку, и заполнение. Сама идея создания подобного приложения у меня появилась в процессе поиска способа структурировать работу с распорядком дня. Мне очень понравилась идея bullet journal-а, но подходящего по функционалу приложения, среди существующих на рынке, я не нашел.
Приложение должно решать следующие задачи:
• Приложение должно быть кроссплатформенное, чтобы пользователь мог пользоваться им с разных устройств без проблем и не было необходимости в разработке похожего функционала для каждого типа устройства отдельно. Это сократит затраты на производство и поддержку, а также позволит сразу иметь возможность монетизации через подключение услуг переноса данных с одного устройства на другое, хранения их в облаке и синхронизации устройств. Модули приложения, ответственные за этот функционал смогут даже не знать где они запущены и все равно правильно осуществлять свою работу, что позволит уменьшить кодовую базу и сделать модули более проработанными, стабильными и протестированными при тех же затратах на производство.
• Приложение должно автоматически переносить дела с одного периода на другой в конце периода. Это позволит создать хороший пользовательский опыт, облегчив пользователям использование нашего приложения и поддержку списка дел в актуальном состоянии.
• Перенесенные с прошлого периода дела должны быть помечены специальными метками, чтобы пользователь видел проблемные места в расписании.
• У пользователя должна быть возможность создавать периодически повторяющиеся дела на определенный период, которые не будут переноситься на следующий период, а отмечаться как не сделанные в случае, если пользователь не отметит из в конце текущего периода.
• У пользователя должна быть возможность просмотра статистики по повторяющимся делам за определенный периода с указанием на графике процента успешного завершения повторяющегося действия.
• Пользователь должен иметь возможность входа в приложения не авторизованным, но при этом у него должен быть ограниченный функционал.
• При авторизации у пользователя должна быть возможность перенести дела из неавторизованного режима в учетную запись.
• Пользователь должен иметь возможность приобретения услуг синхронизации данных на нескольких устройствах с использованием облачного хранилища.
Почему PWA:
Простое написание десктопного, мобильного или веб приложения дало бы опыт, но не позволило бы изучить новые прогрессивные технологии. Написание кроссплатформенного приложения дало бы интересный опыт, но таких приложений много и в этой нише тяжело найти что-то прорывное, с другой стороны новый тип приложений, такой как PWA приложения является достаточно молодой и актуальной технологией, которая работает на разных платформах без особых проблем и подходит нам как ничто иное, так как позволяет работать с приложением без наличия интернета, сохраняя при этом кроссплатформенность.
Предметная область выпускной квалификационной работы - PWA приложение.
Объектом дипломной работы является разработка PWA приложения.
Предметом квалификационной работы создание «Bullet Journal Application»
Целью выпускной квалификационной работы является разработка мобильного приложения.
В рамках выпускной квалификационной работы было разработано PWA приложение "Bullet Journal", удовлетворяющее всем требованиям современных PWA приложений, а именно возможностью работы при отсутствии интернета, возможностью кроссплатформенной работы, как на мобильных устройствах, так и на персональных компьютерах пользователей. Был получен опыт разработки архитектуры приложения, настройки service worker-ов, настройки непрерывной интеграции и доставки, настройки пирамиды тестирования, работы с облачными сервисами, лямбда функциями и разработки клиентской части PWA приложения.
Был полностью реализован необходимый функционал и учтены все технические требования.
На этапе проектирования архитектуры приложения были проанализированы имеющиеся виды архитектуры кроссплатформенных приложений, выбрана подходящая архитектура для создания PWA приложения с поставленными требованиями. Ею оказалась Serverless архитектура, так как необходимо хранить большую часть бизнес логики на стороне клиента, из-за необходимости работы приложения при отсутствии интернета. Так же на этом этапе было принято решение использовать облачные сервисы, в частности firebase, так как он предоставляет весь необходимый функционал для разработки приложений с Serverless архитектурой.
Во время разработки приложения были проанализированы аналоги, имеющиеся на рынке. Были учтены их недостатки и преимущества. Были проанализированы существующие способы реализации кроссплатформенных приложений, проведено сравнение существующих фреймворков и выбран React как наиболее подходящий, для реализации клиентской части приложения.
Приложение было протестировано в процессе разработки при помощи пирамиды тестирования, состоящей из unit, интеграционных и e2e тестов. Так же проведено ручное тестирование. Для проведения автоматического тестирования был настроен процесс непрерывной интеграции и доставки, позволяющий быстрее и качественнее доставлять новый функционал конечному потребителю.
1. Typescript документация [Электронный ресурс]. - Режим доступа: https://www.typescriptlang.org/.
2. WC3 стандарты [Электронный ресурс]. - Режим доступа: https://www.w3.org/standards/.
3. Самоучитель JavaScript [Электронный ресурс]. - Режим доступа: https://learn.javascript.ru/.
4. Документация React [Электронный ресурс]. - Режим доступа: https://ru.reactjs.org/.
5. Документация JavaScript [Электронный ресурс]. - Режим доступа: https://developer.mozilla.org/ru/.
6. Справочник по HTML5 [Электронный ресурс]. - Режим доступа: http://htmlbook.ru/.
7. Учебник по HTML5 CSS3 [Электронный ресурс]. - Режим доступа: https://htmlacademy.ru/.
8. Документация по react-redux [Электронный ресурс]. - Режим доступа: https://redux.js.org/basics/usage-with-react.
9. Bakaus P. What Are Progressive Web AMPs?
[Электронный ресурс] // 2016. URL:
https://www.smashingmagazine.com/2016/12/progressive-web- amps/ .
10. Dean A. H. Progressive Web Apps. N.Y.: Meap, 2017. P. 2-5.
11. Markov D. Progressive Web Apps. Everything You Should Know About Progressive Web Apps [Электронный ресурс] // 2016. URL: http://tutorialzine.com/2016/09/everything- you-should-know-aboutprogressive-web-apps/ .
12. Демьяненко М. Что такое Progressive Web Apps и какие возможности они открывают для вашего бизнеса [Электронный ресурс] // 2016. URL: https://netpeak.net/ru/blog/ chto-takoe-progressive-web-apps-i-kakievozmozhnosti-oni- otkryvayut-dlya-vashego-biznesa/ .
13. Сальников М., Липатцев А., Кардава З., Пугачев С. Progressive Web Apps Day. Онлайн конференция [Электронный ресурс] // 2016. URL: pwaday.ru.
14. Мобильные приложения. Анализ защищенности мобильных приложений [Электронный ресурс] // 2016. URL: https://dsec.ru/services/securityanalysis/mobile-applications.
15. 10 важных советов безопасности для защиты сайта [Электронный ресурс] // 2016. URL: http://alexdev.ru/1025.
16. Green I. From AMP to PWA [Электронный ресурс] // 2016. URL: h
17. Кедлек Т. Адаптивный дизайн. Делаем сайты для любых устройств; Питер - М., 2013. - 288 c.
18. Фрейен Бен HTML5 и CSS3.Разработка сайтов для любых браузеров и устройств; Питер - М., 2014. - 304 c.
19. Мациевский Николай. Разгони свой сайт. Методы клиентской оптимизации веб-страниц; Интернет-университет информационных технологий, Бином. Лаборатория знаний - М., 2009. - 264 c.
20. Гарднер Л., Григсби Д. Разработка веб-сайтов для мобильных устройств; Питер - М., 2013. - 397 c.
21. Дакетт, Д. HTML и CSS. Разработка и дизайн веб¬сайтов / Д. Дакетт. - М.: Эксмо, 2018. - 208 c.
22. Якоб Нильсен, Хоа Лоранжер «Web-дизайн. Удобство использования Webсайтов»Издательство «Вильямс». 2007г.- 376 с.
23. Мэтью МакДональд «Создание Web-сайтов. Основное руководство» 2010 г. Издательство: Эксмо, - 768 с.
24. Чебыкин Ростислав Разработка и оформление текстового содержания сайтов; БХВ-Петербург - М., 2011. - 528 c.
25. Сырых, Ю. Современный веб-дизайн. Настольный и мобильный / Ю. Сырых. - М.: Диалектика, 2019. - 384 c.
26. Рассел Р. Защита от хакеров коммерческого сайта; Книга по Требованию - М., 2014. - 548 c.
27. Андерсон С. Приманка для пользователей. Создаем привлекательный сайт; Питер - М., 2013. - 537 c.
28. Киселев, С.В. Веб-дизайн: Учебное пособие / С.В. Киселев. - М.: Academia, 2018. - 384 c.
29. Нильсен, Я. Веб-дизайн: книга Якоба Нильсена / Я. Нильсен. - М.: Символ, 2015. - 512 c.
30. Гарретт, Д. Веб-дизайн. Элементы опыта взаимодействия / Д. Гарретт. - СПб.: Символ-плюс, 2015. - 192
c.