Java Firebase Firestore体系结构:参考还是对象?
我正面临一个让我彻夜未眠的问题。。。这两种解决方案之间的最佳方式是什么?仅供参考,我正在构建一个示例聊天应用程序 解决方案1:Java Firebase Firestore体系结构:参考还是对象?,java,android,firebase,nosql,google-cloud-firestore,Java,Android,Firebase,Nosql,Google Cloud Firestore,我正面临一个让我彻夜未眠的问题。。。这两种解决方案之间的最佳方式是什么?仅供参考,我正在构建一个示例聊天应用程序 解决方案1: public class Message { private String message; private Date dateCreated; private DocumentReference userSender; //Reference } 解决方案2: public class Message { private String
public class Message {
private String message;
private Date dateCreated;
private DocumentReference userSender; //Reference
}
解决方案2:
public class Message {
private String message;
private Date dateCreated;
private User userSender; //Plain Object
}
第一个非常类似SQL,允许我保留对发送消息的用户的引用。然而,通过一个巨大的消息列表(例如在一个RecyclerView中)访问每个用户的属性确实是一件痛苦的事
第二个更像JSON,但不可变:例如,如果用户更改其个人资料图片,以前发送的每条消息都将保留旧图片
有什么解决方案或想法吗?与Firebase实时数据库不同,Cloud Firestore引入了
参考
,因此您可以利用它
请注意,没有最好的解决方案。你可以自由地使用你想要的任何东西,但有一件事要考虑,在你的应用程序中读/写数据的最简单方式是什么
在另一个类中使用一个类,这是Firestore的常见做法。在早期版本的数据库中,在Firebase Realtime数据库中,如果您在另一个类中嵌套了一个类(如您的示例中所示),则每次您都希望查询数据库以仅显示消息时,enitireMessage
对象将与User
对象一起下载,结束花更多的钱在一起。但当涉及到收藏和文档时,情况就不一样了
关于第二种方法,您可以使用公共setter来更改对象中字段的值
使用Firestore,我可以说第二种解决方案非常适合我,因为您可以编写更清晰的代码,但这只是我的意见。为了便于使用引用,解决方案是在一个
映射中构造引用
公共类消息{
私有字符串消息;
创建私人日期;
私人地图参考;
}
您可以创建一个泛型类或方法,该类或方法将在检索消息时处理引用的解析您可以使用文档引用
而不是对象
,然后使用:
DocumentSnapshot pro = Tasks.await(data.getUserSender().get());
User plainObject = pro.toObject(User.class);
DocumentSnapshot pro = Tasks.await(data.getUserSender().get());
User plainObject = pro.toObject(User.class);