从不同的集合 Firestore 构建模型 - Swift 以编程方式

Construct Model from different Collections Firestore - Swift Programmatically

我正在使用 MVC 模式部署 iOS 应用程序。 当我实现像 whatsapp 这样的聊天功能时,我感到困惑:

我的基本想法是,我需要使用 firestore 集合文档中存在的所有用户来填充 collection view,并向发送的最新消息添加侦听器。

集合的架构如下所示:

User_lastMessages(合集)

|

用户 ID(文档)

|

ChatUsers(集合)

|

finalDocumentId(文档)

这份最新文件包含:

-user id
-lastMessageSent
-timestampLastMessage
-username 

我需要完成的UI表示是这个:

1) usernamelastmessage 来自我之前提到的集合

2)ImageView(白色方块)来自另一个集合,我可以通过用户的uid检索它

问题:您在单元格右侧看到的数字来自另一个集合,它可以不断变化。我如何确定每当它发生变化时 UI 也会相应地发生变化?

我很困惑使用不同的 Firestore 集合文档构建模型是否是一种糟糕的方法,或者一个模型必须仅由一个 Firestore 文档组成。

您可以轻松地在模型中使用多个文档。在您的情况下,适当的配置是:

  1. 您的视图控制器加载一个文档
  2. 列表中的每个单元格负责加载另外两个文档(包括图像视图和消息计数)。您可以附加监听器以确保此信息实时更改

但是,在部署之前,您确实需要考虑那些“读取”操作的数量。当您在 Firestore 中设计架构时,您应该始终考虑您的用例并尽量减少不必要的读取。

例如,您可以有另一个名为“聊天”的集合,其中包含:

  1. user1_id
  2. user2_id
  3. number_of_messages
  4. chat_icon
  5. unique_chat_id

在这种情况下,一个简单的查询“where user1_id == ID”将为您提供一个包含您需要的所有信息的数组。

Messages 然后可以包含一个字段 chat_id,这将使您能够加载属于特定聊天的所有消息。

我上面概述的不一定是最好或最优化的架构。但是,我建议您观看有关此内容的 Firestore 视频(它们很棒):https://www.youtube.com/watch?v=haMOUb3KVSo