🔥

Тред (Саша Аскеров)


Отношения с андроидом у меня начались в 2010 году. Я на последнем курсе универа и чуть-чуть умею в джаву. Было 2 варианта: андроид или бекенд. Андроид победил

Первым местом работы был аутсорс Unreal Mojo. Напомню, это 2011 год и мобильная разработка только зарождается. Были конечно ребята, которые что-то делали для что-то для Pocket PC, Symbian etc, JavaME, но это не то и не та массовость.

Так я сходу попал в быстро развивающуюся отрасль, в которой на тот момент минимум экспертизы. К примеру, вот то, что AsyncTask это так себе штука еще не понимают.

Было весело. Что-то получалось, что-то не очень. При этом в клиентах сразу появились всякие банки, яндексы и т.д. Которые через какое-то забирали разработку себе.

Думаю, что не всегда у унаследовавших мой код того времени сложилось хорошее мнение об авторе. Если кто читает, сорри гайз. Хотя, то что приходило на поддержку нам, бывало и похуже.

В 2014 я начал работать во Wrike. И практически все, о чем я буду рассказывать связано с работой тут. Далее о Wrike и нашем андроид приложении.

Wrike это SaaS приложение для управления работой. Система большая, сложная, в большей степени ориентированная на крупных клиентов.

Основной упор делается на веб приложение и основные ресурсы они там. Так что тут не mobile first история. Тем не менее, всю основную функциональность мы поддерживаем.

Даже в базовых фичах находится место интересному. Например коллаборативному редактору текста, сложным вьюшкам (диаграмма ганта, календари). Плюс добавляется мобильная специфика. А еще наш клиент толстенький — многое умеет в оффлайне.

Все это одной небольшой андроид командой (3-5 разработчиков в разное время). Главный плюс маленькой команды в том, что ты привыкаешь к людям, легко их понимаешь, знаешь от кого чего ждать.

Главный минус: редко приходят новые люди. А новые люди всегда приносят что-то полезное. Сейчас мы понемногу становимся больше. В один из дней будет тред про наш подход к собеседованиям.

Немного о технической стороне нашего приложения. Ходят слухи, что мобильное приложение у нас Flutter. Но нет, и предположу, что не будет :)

Апп появился в 2013 году. Тогда у нас было примерно следующее: UI на фрагментах. Внутри фрагментов лоадеры. Лоадеры подписаны на апдейты базы данных по URI через ContentResolver. Обновления в базу записываются через ContentProvider и идут на сервер через SyncAdapter.

Кроме загрузки данных из базы внутри лоадера была еще загрузка данных с сервера и хитрая логика насчет того, когда нужен запрос на сервер, а когда нет.

В целом схема рабочая. И хорошая на том этапе развития. Получался такой однонаправленный поток данных из базы через лоадер в UI. Но с растущей сложностью такого решения хватать перестало.

Но сидели мы на этом довольно долго и перешли только на ViewModel/LiveData, когда они появились. Стали использовать всякие MediatorLIveData и NetworkBoundResource. Это была плохая идея :) Удивительно, но RxJava прошла мимо нас.

Сейчас у нас нас почти MVVM. ViewModel с юзкейсами внутри, когда они нужны. Наружу из вью моделей торчит Flow с состоянием.

Кстати, когда я тут говорю ViewModel, это не совсем андроидная ViewModel. По крайней мере мы от нее стараемся зависеть поменьше. Зачем? А вот medium.com/wriketechclub/…

Так что у нас есть легаси из лоадреов, легаси из логики на MediatorLiveData и NetworkBoundResource, и еще некоторе. Звучит страшно? Похоже на монстра франкенштейна?

На самом деле не так уж страшно. Если нам приходит продуктовая задача, мы безжалостно переписываем легаси. А там, где задач нет, и все работает... ну легаси и легаси, пусть живет, не мешает если не сильно переживать насчет самого факта его существования.

Иногда мы пишем велосипеды. Есть например своя реализация навигации, своя библиотека для работы с базой данных поверх SqliteDatabase на Kotlin. О чем-то из этого интересно подробней?

Читатели, а какое у вас отношения к велосипедам, для всяких штук, для которых есть некоторе стандартное решение: от гугла, или стороннее, но популярное.
🤔 54.2% У нас такие есть
🤔 45.8% Всегда возьму готовое

На сегодня все. Завтра будет про то, как мы делаем поддержку оффлайна. А в приложении, котором вы занимаетесь есть оффлайн режим?
🤔 43.9% Нет.
🤔 27.1% Да, но только чтение
🤔 29.0% Да, с редактированием.

Саша АскеровСаша Аскеров