IPad App тянуть и толкать реляционные данные

Я в настоящее время собираю бизнес-приложение для iPad. Он будет говорить с базой данных Microsoft SQL Server.

Мой вопрос заключается в том, что является наиболее эффективным способом передачи реляционных данных через линию. Одним из примеров является отображение списка контактов в приложении. У записи контакта есть поле DepartmentID (связанное с таблицей отдела) и поле ContactTypeID (связанное с таблицей ContactType). Я надеюсь, что когда пользователь впервые запустит приложение, я перенесу данные таблицы отделов и типов контактов на ipad. Затем, когда я извлекаю данные из списка контактов, я просто извлекаю идентификаторы полей и извлекаю связанные с ними данные из данных, которые я извлекал при запуске. Пользователь должен затем нажать на запись в списке и открыть страницу с информацией о выбранном контакте. Это простой пример, но, надеюсь, это поможет мне.

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

заранее спасибо

1 ответ

Популярный подход заключается в преобразовании ваших серверных объектов в JSON, а затем отправке строки JSON на устройство. На устройстве декодируйте JSON в значения NSDictionary/NSArray, используя некоторую инфраструктуру JSON (я предлагаю JSONKit, поскольку он очень простой и очень быстрый).

Получив декодированный JSON, вы можете использовать этот метод (предупреждение о бесстыдном подключении) , чтобы превратить объекты NS* в объекты CoreData и сохранить их на своем телефоне.

Что касается поддержания отношений, вы можете использовать либо вложенное представление, либо плоское представление. Пример вложенной реализации будет:

{
    class: "Contact",
    first_name: "John",
    last_name: "Doe",
    contact_type: {
        class: "ContactType",
        type: "some value"
    },
    department: {
        class: "Department",
        name: "Department of Transportation"
    }
}

Это предпочтительный подход, если у вас есть простая база данных, без циклов отношений.

Кроме того, вы можете использовать плоское представление:

{
    class: "Contact",
    id: 1,
    first_name: "John",
    last_name: "Doe",
    contact_type_id: 15,
    department_id: 34
}

{
    class: "ContactType",
    id: 15,
    type: "some value"
}

{
    class: "Department",
    id: 34,
    name: "Department of Transportation"
}

Затем вы должны будете разрешить отношения вручную, используя contact_type_id и Department_id на устройстве.

Лучше всего протестировать оба этих подхода и посмотреть, какой из них лучше работает в вашем конкретном случае. Лично я бы рекомендовал вложенный подход (если это позволяет ваша структура БД), поскольку он намного быстрее и разрешение отношений выполняется на сервере (где вы, вероятно, можете себе это позволить), а не на устройстве (где вы, вероятно, можете " я не могу себе этого позволить, если у вас большая база данных).

Другие вопросы по тегам