Базовые данные с веб-сервисами рекомендуется шаблон? - PullRequest
6 голосов
/ 05 марта 2011

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

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

Мне интересно, есть ли хорошие рекомендации для рекомендуемой модели взаимодействия.

Например, пользователь сможет создавать новые объекты в приложении. Допустим, пользователь создает новый объект сотрудника, обычно он создается, обновляется и затем сохраняется. Я видел рекомендации, которые обновляют каждый из этих шагов на сервере -> когда пользователь создает его, когда пользователь вносит изменения в поля. И если пользователь отменяет в конце, удаление отправляется на сервер. Еще одна рекомендация для той же операции - хранить все локально и отправлять полное обновление на сервер только после сохранения пользователем.

Помимо этого примера, мне любопытно, есть ли какие-то общие рекомендации / шаблоны для обработки CRUD-операций и обеспечения их синхронизации между веб-сервером и coredata.

Большое спасибо.

Ответы [ 3 ]

1 голос
/ 07 марта 2011

Будьте готовы немного оторвать ваши волосы.Я работал над этим, и проблема в том, что образцы Core Data довольно просты.В ту минуту, когда вы переходите к сложной модели и пытаетесь использовать NSFetchedResultsController и его делегата, вы сталкиваетесь со всевозможными проблемами с использованием нескольких контекстов.

Я использую один для заполнения данных из вашего веб-сервиса в фоновом режиме "block ", и второй для использования таблицы - вы, скорее всего, в конечном итоге будете использовать таблицу для основного списка и подробного представления.

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

1 голос
/ 05 марта 2011

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

Общая идиома приложений для iPhone состоит в том, что не существует такой вещи, как «Сохранить». Пользователь обычно ожидает, что что-то будет совершено в какой-то разумный момент, но он не представляется пользователю как экономия как таковая.

Так, например, представьте, что у вас есть пользовательский интерфейс, который позволяет пользователю редактировать какую-то запись, которая будет сохранена в локальных основных данных, а также отправлена ​​на сервер. В тот момент, когда пользователь выходит из пользовательского интерфейса для создания новой записи, он, возможно, нажмет кнопку «Готово» (например, обычно не называется «Сохранить»). В тот момент, когда они нажимают «Готово», вы захотите начать запись основных данных, а также начать передачу на удаленный сервер. Серверный сервер не обязательно будет загружать пользовательский интерфейс или заставлять их ждать, пока он не завершится - лучше разрешить им продолжать использовать приложение - но это происходит. Если обновление на сервер не удалось, вы можете сообщить об этом пользователю или сделать что-то подходящее.

Хороший вопрос, который следует задать себе при планировании детализации операций записи в основные данные и / или на удаленный сервер: что произойдет, если приложение выйдет из строя или у телефона не будет работать в любых точках приложения ? Сколько потери данных может произойти? Хорошие приложения снижают риск потери данных и могут повторно запускаться в состоянии, очень похожем на то, в котором они находились ранее после выхода по какой-либо причине.

0 голосов
/ 05 марта 2011

Возможно, вы захотите прочитать о «транзакциях», которые в основном представляют собой группировку нескольких действий / изменений как единого атомарного действия / изменения. Это помогает избежать частичного сохранения, которое может привести к несогласованности данных на сервере.

В конечном счете, это очень большая тема, особенно если данные сервера распределяются между несколькими клиентами. Самое простое, вы хотели бы принять решение об основных политиках. Последний спасет победу? Есть ли какое-то представление о удаленных блокировках объектов в хранилище данных сервера? Как разрешается конфликт, когда, скажем, два клиента редактируют одно и то же свойство одного и того же объекта?

Что касается того, как все делается на iPhone, я бы согласился с occulus, что «Done» обеспечивает естественную точку для сохранения изменений на сервере (в отдельном потоке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...