Постройка World Travel Tracker: кейс-стади Android-приложения
World Travel Tracker начался с простого, личного зуда: хотелось визуальной записи того, в каких странах я реально был, не полагаясь на таблицу или память.
Основная идея
Интерфейс на основе карты, где посещённые страны отмечаются напрямую, с данными, структурированными достаточно хорошо, чтобы экспортировать и использовать в другом месте — не запертыми в приложении.
Почему карта, а не список
Список названий стран функционально полон, но не даёт того же ощущения охвата с первого взгляда, которое даёт визуальная карта — увидеть, какие регионы не посещены, немедленно очевидно на карте способом, которым текстовый список не передаёт. Это была реальная причина построить выделенное приложение вместо просто использования таблицы или заметки.
Офлайн-первый по необходимости, а не по предпочтению
Путешествие — это как раз ситуация, где связность наименее надёжна — приложению нужно было работать полностью без соединения, поскольку отметить посещённую страну в удалённой области без сигнала — совершенно нормальный случай использования, а не крайний случай. Это означало проектирование слоя данных вокруг локального хранилища как источника истины с самого начала (см. наше руководство по офлайн-первой архитектуре для общего паттерна, которому это следует), а не доработку позже.
Почему JSON-экспорт
Модель данных проста — список посещённых стран с метаданными — что делает JSON естественным выбором: читаемым человеком, легко резервируемым вручную, и легко переносимым в другие инструменты или скрипты, если кто-то захотел бы сделать больше со своими собственными данными, чем предоставляют встроенные представления приложения. Проприетарный бинарный формат не решил бы ничего, в чём нуждалось само приложение, и сделал бы собственные данные пользователя труднее доступными для него за пределами приложения.
{
"visitedCountries": [
{ "code": "IT", "name": "Italy", "visitedDate": "2024-06-12" },
{ "code": "DE", "name": "Germany", "visitedDate": "2023-11-03" }
]
}Что бы я подчеркнул для любого, кто строит нечто похожее
- Начните с модели данных, а не UI карты. Карта — это рендеринг данных — правильное построение лежащей в основе структуры (что считается «посещением», какие метаданные важны) сначала делает визуальный слой прямолинейным впоследствии, а не наоборот.
- Офлайн-первый не опционален для приложений в контексте путешествий — это близко к основному требованию, а не приятное дополнение.
- Экспортируйте в открытом формате, если есть хоть какой-то шанс, что пользователи захотят свои данные за пределами вашего приложения — это стоит немного заранее и избегает реальной проблемы доверия позже.
Такого рода проект — личная утилита, которая вырастает во что-то, стоящее полировки и распространения, — одна из моих любимых категорий для постройки. См. страницу проектов для похожих.
Частые вопросы
Почему строить выделенное приложение вместо просто использования таблицы?
Таблица не даёт визуальной карты того, что было посещено, плохо работает на мобильном для быстрых обновлений во время путешествия, и не экспортирует в структурированном, переиспользуемом формате — специально построенное приложение решает все три проблемы сразу.
Почему конкретно JSON-экспорт, а не проприетарный формат?
JSON читаем человеком, легко резервируется, и легко импортируется в другие инструменты или скрипты позже — проприетарный формат запер бы данные в приложении без лёгкого выхода, если бы пользователь захотел свои данные где-то ещё.
Актуальна ли офлайн-поддержка для приложения отслеживания путешествий?
Очень актуальна — путешествие — это как раз тот сценарий, где связность наименее надёжна, поэтому приложению для отслеживания посещённых стран нужно полностью работать офлайн по дизайну, а не как запоздалая мысль.