Skip to content

vibe0508/MapPoints

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 

Repository files navigation

PointMap

Описание решения

  1. Приложение состоит из 4 основных компонентов: UI, Logic, Storage, Networking.
  2. Данные для отображения берутся с помощью NSFetchedResultsController, работающем с контекстом главной очереди. Любые обновления данных, которые произведет модуль логики, будут отображены в ui.
  3. Каждый модуль логики использует свой приватный managedObjectContext. Все контексты соединены непосредствено со стор координатором и синхронизуются по средствам нотификаций. Такой подход позволяет достичь более высокой производительности, чем при выстраивании иерархии контекстов.
  4. Валидация кеша проверяет, можно ли запрашиваемую область заполнить данными из предыдущих запросов с заданным возрастом. К примеру, если укрупнить масштаб, новой загрузки не будет. Или если с крупным масштабом посмотреть всю Москву, используя скролл, то при переходе к общему плану загрузки не произойдет, если у нас и так есть все данные. Это полезно тем, что на карте пользователь редко смотрит одинаковые регионы, но возможно он смотрит "стык" двух предыдущих и данные грузить не надо.
  5. Все параметры могут быть легко настроены через файл конфигурации: адрес api, срок жизни кеша, радиус обзора при запуске и тд

Известные недостатки

  1. Механизм валидации кеша имеет низкую масштабируемость. Можно предположить, что при интенсивном использовании он начнет подтормаживать (хоть и не на UI потоке, но время на принятие решения о загрузки увеличится). С этим можно бороться, сменив графический метод расчета на аналитический, с определением общей формы загруженных областей и проверкой вхождения текущей области.
  2. Модель точки не оптимальна с точки зрения поиска точек в sql. Координаты храняться в сериализованом виде, что не дает отфильтровать точки по географическому признаку еще в базе. Нужно уйти от сериализованного представления в виде бинарных данных к 2 числам долготы и широты.
  3. В случае, если мы загружаем регион, и в выгрузки нет какой-то точки, а в кеше она есть - точка удаляется. Однако при обновлении UI могут возникнуть проблемы, тк без данных (а они на тот момент уже удалены), может быть невозможно индифицировать точку. Этой проблемой я практически не занимался, тк протестировать это все равно мне не представляется возможным.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages