17.85M
Категория: ПрограммированиеПрограммирование

Один код, две платформы: миф или реальность

1.

Потяков Виталий / Руководитель мобильной разработки
Ивлев Александр / Ведущий программист
Разработка мобильного СБИС, 2017

2.

● Введение
● Фреймворки
● Web-приложения
● Native UI, C++ Back
● CouchBase
● Итог

3.

Наше
приложение

4.

Хотим
Мобильное приложение
Нативный интерфейс
Offline режим
Удобство разработки

5.

Мобильные платформы
73%
19%
>1%

6.

Реклама

7.

Xamarin
Нативен
С# как язык
Единый код
3 платформы
7

8.

А что не так?
8

9.

Xamarin
Кривой интерфейс
Глючная среда
Баги
Где найти специалистов?
9

10.

Гибриды
● PhoneGap
● Cordova
● Ionic
● Monaca, Taco… ой
10

11.

Нативная
разработка
11

12.

Языки
Swift / Obj-C
Kotlin / Java
C++ / C
djinni
12

13.

IDE
Xcode / AppCode
Android Studio
VS / CLion / Console
13

14.

А оно того
стоит?
14

15.

Что хорошо?
● Единая Бизнес Логика
● Классные специалисты
● Идеальный интерфейс
● Параллельная разработка
15

16.

А что плохо?
● Дорогая разработка
● Коммуникация команд
● Дублирование интерфейса
● Мосты между языками
16

17.

Мосты
Jinni для Java
C для Obj-c/Swift
djinni
17

18.

Мост из ObjC в C++
@interface Test : NSObject
+ (int32_t)func(NSString*)s;
@end
@implementation Test
+ (int32_t)func:(NSString*)s {
return SomeCppClass::Func(std::string([s UTF8String],
[s lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
}
@end
18

19.

Мост из Java в C++
jint JNICALL Java_Test_func(JNIEnv* jniEnv, jobject, jstring js) {
const jsize len = env->GetStringLength(js);
const jchar* c = env->GetStringChars(js, nullptr);
std::string s = Utf16ToUtf8(std::string(c, len));
env->ReleaseStringChars(js, c);
return SomeCppClass::Func( s );
}
19

20.

И так каждый
раз…
20

21.

DJINNI
user = record {
name: string;
birthday: date;
}
users_storage = interface +c {
static instance(): users_storage;
find_user(id: i32): optional<user>;
}
21

22.

И вроде все
хорошо
22

23.

Что делает
backend?
Взаимодействие с API
Кэширование
Актуализация кэша

24.

Типичный модуль
Cloud
UI
API
БЛ

25.

Идея!
На сервер реплику БД
Не взаимодействуем с API
Наполняем всегда реплику

26.

Реплика на сервере
API + БЛ
Sync
БЛ

27.

Есть решения
Realm
Firebase
Couchbase

28.

Couchbase
Lite
Sync
Gateway
Couchbase
Server

29.

СouchBase
● NO SQL
● View (Indexes)
● Live Query
● Репликация

30.

Sync Gateway
CBL
Sync Gateway
Change Feed
БЛ
Doc update
CB
CB
CB

31.

Couchbase
Server
Хранит реплики
Не используем на прямую

32.

Что дальшe?
Общий
интерфейс!

33.

Facebook
AD Manager
80-85% общего кода
9 месяцев iOS
5 месяцев Android

34.

Так вот оно!
JS как язык
Один поток JS
Платформо-зависимый код

35.

В общем
случае миф!

36.

Framework
● Быстрый старт
● Прототипирование
● Не native интерфейс
● Мини приложения

37.

С++
● Сложная БЛ
● Мосты
● Есть программисты
● Дублирование интерфейса

38.

CouchBase
● Большие проекты
● Сложность вхождения
● Серверная инфраструктура

39.

Ищите свой
путь!

40.

Вопросы?
English     Русский Правила