Similar presentations:
Join money app. Постановка задачи, возможности и ui приложения Структура приложения и решения
1. Join money app
JOIN MONEY APPСЮКОВ СЕРГЕЙ
12.06.2017
2. Содержание
СОДЕРЖАНИЕПостановка задачи, возможности и ui приложения
Структура приложения и решения
3. Постановка задачи, возможности и ui приложения
ПОСТАНОВКА ЗАДАЧИ, ВОЗМОЖНОСТИ ИUI ПРИЛОЖЕНИЯ
4. Постановка задачи
ПОСТАНОВКА ЗАДАЧИВ маленькой компании работают 5 человек. Два учредителя и трое наемных работников. Компания на
енвд схеме налогообложения, поэтому нет необходимости в налоговой отчетности за каждую денежную
операцию. В денежном обороте принимают участие все сотрудники (прием предоплаты, закупка
материалов, оплата накладных расходов, прием пост оплаты и т.д.).
Учет движения денежных средств осуществляется через одним из учредителей, остальные присылают
ему все свои расходы и доходы по смс, а он вносит их в используемую им программу для учета расходов.
Проблемы:
Второй учредитель имеет не постоянный доступ к данным программы.
Каждый из наемных сотрудников не знает о своем текущем балансе.
Трудоемкий и неудобный процесс для занимающегося внесением информации в систему учета.
5. Постановка задачи
ПОСТАНОВКА ЗАДАЧИВнесение данных
Вносить основные операции (доход, расход, перевод), с указанием счетов, категорий, тегов.
Просмотр остатка денег на счетах.
Просмотр детализации по счетам, категориям, тегам.
Синхронизация данных между устройствами.
Многопользовательский режим
Подключение к одному аккаунту нескольких пользователей.
Закрепление за пользователем счета.
Выставление уровня доступа пользователя. Выявлено три роли:
Администратор – может видеть и редактировать все записи.
Пользователь – может просматривать все записи, но не редактировать. Может добавлять заметки (текст и фото) для последующей
обработки их администратором.
Ограниченный пользователь – может просматривать операции только по своему счету (без редактирования). Может видеть баланс своего
счета. Может добавлять заметки.
6. Анализ существующих предложений
АНАЛИЗ СУЩЕСТВУЮЩИХ ПРЕДЛОЖЕНИЙПриложение
Дребеденьги
TeamSpender
Дзен-мани
Monefy
Мои финансы
AndroMoney
Журнал расходов
Personal Finanse
CoinKeeper
Синхронизация
Несколько пользователей
на один аккаунт
Распределение ролей
между пользователями
7. UI
Вход в приложениечерез Google аккаунт
Регистрация. Возможность
присоединиться к существующему
аккаунту
Ожидание подтверждения при
запросе на присоединение к
существующему аккаунту
8. UI
Меню (при входе подадминистратором)
Список счетов с
балансом по каждому
Список операций
9. UI
Редактированиеоперации
Окно ввода суммы
операции
Окно установок
фильтра по датам
10. UI
Редактированиепользователя
Список заметок
Редактирование
заметки
11. Решения
РЕШЕНИЯ12. Схема сетевых запросов
СХЕМА СЕТЕВЫХ ЗАПРОСОВAndroid client
UI Thread
Activity
or
Fragments
Apache server
Background
EventBus
Request
handler
Retrofit
PHP
SQLite
MySQL
13. Схема Запросов к базе данных
СХЕМА ЗАПРОСОВ К БАЗЕ ДАННЫХUI Thread
StartPreparingData(){
AsyncExecutor.create.execute(…);
}
onDataPrepared(data){
// update UI
}
Background
EventBus.AsyncExecutor
EventBus.StyckyEvent
DataProvider.getData(){
// take data
…
EventBus.postStyky(… data);
}
softRef<Data>
onException(Exception e){
// handle exception
}
SQLite
14. Решения
РЕШЕНИЯApache + PHP + MySQL
Рассматриваемые альтернативы:
Firebase real-time database
+ обновления в реальном времени
+ меньше кода
- NoSQL база данных. В приложении используется запросы с JOIN, который отсутствует в Firebase.
15. Решения
РЕШЕНИЯEventBus + Retrofit
Рассматриваемые альтернативы:
Retrofit (асинхронные запросы)
- не следит за состоянием фрагмента/активити
Loaders + Retrofit
- более сложная реализация
AsyncTask + Retrofit
- не следит за состоянием фрагмента/активити
16. Решения
РЕШЕНИЯRetrofit
Рассматриваемые альтернативы:
Volley
- нет синхронных запросов, а асинхронные не отслеживают жизненный цикл фрагментов.
HttpURLConnection
- Нужно вручную парсить json.
17. Решения
РЕШЕНИЯДля кеширования запросов к sqlite базе данных, был создан класс DataProvider. Это singleton, через
который все фрагменты запрашивают данные из базы.
В этом классе результаты всех используемых запросов к базе сохраняются в soft reference.
Если данные и условия запроса не были изменены, то в следующий DataProvider сразу возвращает
данные из соответствующей soft reference (или если система их удалили, то снова идет в sqlite)
При изменении/добавлении данных, вызываем у DataProvider метод обнуляющий соответствующую soft
reference.
18.
БЕЗОПАСНОСТЬClient
параметр 1,
параметр 2,
параметр 3,
…
google account token,
account id,
request sign (sha1 от всех
параметров запроса и appKey,
сложенных в одну строку)
Server
запрос
- Вычисляется своя версия request sign и
сравнивается с пришедшей
- Проверяется соответствие token и account
id
- Если access status данного аккаунта
позволяет вносить изменения в базу, то
вносятся изменения