使用 Azure 移动客户端 SDK 的一个与多个存储库 - 体系结构指南

Posted

技术标签:

【中文标题】使用 Azure 移动客户端 SDK 的一个与多个存储库 - 体系结构指南【英文标题】:One vs. multiple repositories with Azure Mobile Client SDK - architectural guidance 【发布时间】:2017-07-02 01:55:41 【问题描述】:

我正在编写一个 Xamarin android 应用程序并使用 Azure 移动 SDK。我的数据模型有带有 ListItems 列表的用户。由于用户可以拥有多个列表并且可以共享列表,因此用户和通过 UserLists 实体管理的列表之间存在多对多关系。所以用户 -> 用户列表

所以我在后端有 4 个实体,在客户端有 4 个实体。同步设置为只提取当前用户的列表(和相关的列表项)。现在所有 4 个实体都由一个存储库 (ListRepository) 管理,因为这些实体是如此相互关联。这是一个很好的模式吗?有 4 个实体,它已经失控(只有 2 个是“可更新的”——列表和列表项)。如果这个模型要增长,存储库会变得非常臃肿。

或者,拥有多个存储库(每个实体一个)并将它们分组到一个服务下将是人们所期望的,但这意味着在服务和各种存储库之间来回往返以捕获相互依赖的实体。另外,除非它们都与同一个 SyncContext 相关,否则如何处理引用完整性?

【问题讨论】:

“存储库”和“实体”是什么意思?您的列表与您的实体和存储库之间的关系是什么?这是后端问题还是客户端问题?或者这只是一个数据库问题? 【参考方案1】:

为了澄清,这是一个客户问题。

我正在构建一个 MVVM Xamarin 应用程序。在 Core PCL 项目中,我有 ViewModels、Models(又名实体)、Services 和 Repositories。 ViewModel 与服务通信,后者又与使用 Azure 移动客户端 SDK 与移动应用程序 Rest API 通信的存储库(将在某个时间点放置在 Azure 中)进行通信。用户、列表和列表项是我的模型,如上所述,它们之间存在一对多的关系。

我有一个单独的存储库来处理用户模型和一个单独的处理列表和列表项。似乎我无法在不提交用户的情况下提交列表,但用户在不同的存储库中,所以出现了问题。

我已经通过将两个存储库基于相同的静态 MobileServiceClient 和 MobileServiceSQLiteStore 来解决它。

基于以上所述,在我看来,如果数据库是通过引用完整性实现的,那么要么 a) 实体必须以特定顺序从客户端提交到后端(尚未证明这一点),要么 b ) 客户端必须对所有具有关系的实体使用相同的 MobileServiceClient 和 MobileServiceSQLiteStore。

【讨论】:

以上是关于使用 Azure 移动客户端 SDK 的一个与多个存储库 - 体系结构指南的主要内容,如果未能解决你的问题,请参考以下文章

通过 facebook ios SDK 结合 Azure 移动服务获取名字和姓氏

Azure 通知中心 - 从移动应用注册并通过应用后端发送通知

使用 Blob 服务客户端查找 azure 帐户密钥失败(azure python sdk)

Azure 移动服务 - 多个 azure 活动目录

使用 .Net 客户端 SDK 获取 Azure DevOps 团队

使用 Java SDK 的 Azure 服务总线访问,连接模式