Отношения с андроидом у меня начались в 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%
Да, с редактированием.Саша Аскеров