2017-02-13 16 views
0

Я пишу приложение Xamarin для Android и используя Azure Mobile SDK. В моей модели данных есть пользователи со списками со списком ListItems. Поскольку пользователи могут иметь доступ к нескольким спискам и спискам, между пользователями и списками, управляемыми через объект UserLists, существует связь «Множество ко многим». Таким образом, User -> UserLists < - Списки < - ListItems. На данном устройстве будут загружены только списки текущего пользователя.Один или несколько хранилищ с Azure Mobile Client SDK - архитектурное руководство

Таким образом, у меня есть 4 объекта на внутреннем сервере, и у меня есть 4 объекта на клиенте. Синхронизация настроена так, что она только вытягивает текущие списки пользователей (и связанные элементы списка). Теперь все 4 объекта управляются одним репозиторием (ListRepository), поскольку эти сущности настолько взаимосвязаны. Это хороший образец? С четырьмя сущностями его уже выходит из рук (только 2 «обновляемы» - списки и списки). Если эта модель будет расти, хранилище станет довольно раздутым.

В качестве альтернативы, наличие нескольких репозиториев (по одному для каждого объекта) и группировка их под одной службой было бы тем, чего можно было бы ожидать, но это означало бы много поездок между службой и различными репозиториями для захвата взаимозависимых объектов. Кроме того, как будет обрабатываться ссылочная целостность, если они не связаны с одним и тем же SyncContext?

+0

Что вы подразумеваете под «репозиториями» и «сущностями»? Какова связь между вашим списком и вашими сущностями и репозиторием? Является ли это фоновой проблемой или проблемой клиента? Или это просто проблема с базой данных? –

ответ

0

Чтобы уточнить, это вопрос клиента.

Я создаю приложение MVVM Xamarin. В проекте Core PCL у меня есть ViewModels, Models (объекты a.k.a), службы и репозитории. ViewModels разговаривают с Сервисами, которые, в свою очередь, разговаривают с Хранилищами, которые используют Azure Mobile Client SDK, чтобы поговорить с API Mobile App Rest API (который будет размещен в Azure в определенный момент времени). Пользователи, списки и ListItems - это мои модели, и между ними существует одно-много отношений, как описано выше.

У меня есть отдельный репозиторий для работы с моделью пользователя и отдельный для работы с List и ListItem. Похоже, что я не мог зафиксировать List, не совершая Пользователя, но пользователь находился в другом репозитории, поэтому возникла проблема.

Я решил это, основывая оба хранилища на одном и том же статическом мобильном сервисе MobileServiceClient и MobileServiceSQLiteStore.

Основываясь на вышесказанном, мне кажется, что если база данных реализована с реляционной целостностью, то либо а) объекты должны быть переданы от клиента к серверному контенту в определенном порядке (не указали это), либо б) клиент должен использовать тот же MobileServiceClient и MobileServiceSQLiteStore для всех объектов с отношениями.