2_Потяков_Ивлев.pptx
- Количество слайдов: 40
Один код, две платформы: Миф или реальность? Потяков Виталий Руководитель мобильной разработки / Ивлев Александр / Ведущий программист Разработка мобильного СБИС, 2017
● Введение ● Фреймворки ● Web-приложения ● Native UI, C++ Back ● Couch. Base ● Итог
Наше приложение
Хотим Мобильное приложение Нативный интерфейс Offline режим Удобство разработки
Мобильные платформы 73% 19% >1%
Реклама
Xamarin Нативен С# как язык Единый код 3 платформы 7
А что не так? 8
Xamarin Кривой интерфейс Глючная среда Баги Где найти специалистов? 9
Гибриды ● Phone. Gap ● Cordova ● Ionic ● Monaca, Taco… ой 10
Нативная разработка 11
Языки Swift / Obj-C Kotlin / Java C++ / C djinni 12
IDE Xcode / App. Code Android Studio VS / CLion / Console 13
А оно того стоит? 14
Что хорошо? ● Единая Бизнес Логика ● Классные специалисты ● Идеальный интерфейс ● Параллельная разработка 15
А что плохо? ● Дорогая разработка ● Коммуникация команд ● Дублирование интерфейса ● Мосты между языками 16
Мосты Jinni для Java C для Obj-c/Swift djinni 17
Мост из Obj. C в C++ @interface Test : NSObject + (int 32_t)func(NSString*)s; @end @implementation Test + (int 32_t)func: (NSString*)s { return Some. Cpp. Class: : Func(std: : string([s UTF 8 String], [s length. Of. Bytes. Using. Encoding: NSUTF 8 String. Encoding]); } @end 18
Мост из Java в C++ jint JNICALL Java_Test_func(JNIEnv* jni. Env, jobject, jstring js) { const jsize len = env->Get. String. Length(js); const jchar* c = env->Get. String. Chars(js, nullptr); std: : string s = Utf 16 To. Utf 8(std: : string(c, len)); env->Release. String. Chars(js, c); return Some. Cpp. Class: : Func( s ); } 19
И так каждый раз… 20
DJINNI user = record { name: string; birthday: date; } users_storage = interface +c { static instance(): users_storage; find_user(id: i 32): optional
И вроде все хорошо 22
Что делает backend? Взаимодействие с API Кэширование Актуализация кэша
Типичный модуль Cloud UI API БЛ
Идея! На сервер реплику БД Не взаимодействуем с API Наполняем всегда реплику
Реплика на сервере API + БЛ Sync БЛ
Есть решения Realm Firebase Couchbase
Couchbase Lite Sync Gateway Couchbase Server
Сouch. Base ● NO SQL ● View (Indexes) ● Live Query ● Репликация
Sync Gateway CBL Sync Gateway Change Feed Doc update CB БЛ CB CB
Couchbase Server Хранит реплики Не используем на прямую
Что дальшe ? Общий интерфейс!
Facebook AD Manager 80 -85% общего кода 9 месяцев i. OS 5 месяцев Android
Так вот оно! JS как язык Один поток JS Платформо-зависимый код
В общем случае миф!
Framework ● Быстрый старт ● Прототипирование ● Не native интерфейс ● Мини приложения
С++ ● Сложная БЛ ● Мосты ● Есть программисты ● Дублирование интерфейса
Couch. Base ● Большие проекты ● Сложность вхождения ● Серверная инфраструктура
Ищите свой путь!
Вопросы?