首页 > 解决方案 > 如何将代码/描述扩展到复杂对象?

问题描述

我想在回收站视图中显示一些复杂对象的名称/基本属性列表(即它们由其他对象的多个集合组成),然后在用户选择时获取完整对象。例如,顶级对象是“Play Scripts”,每个对象都包含由与 Play Script 相关联的“Actors”之一说出的许多“Spoken Lines”。

我正在尝试使用 Android 架构组件来执行此操作,并且(使用 Florian@codinginflow.com 的教程)成功地使用 Room 创建了一个简化的 Play_Script 类、DAO 和存储库。我还在 ASP.Net 中创建了一些基本的 REST Web 服务,它们可以提供来自 MySQL 数据库的数据。

让我感到震惊的是,我要走的路径将表现不佳,并使用过多的网络带宽来获取大量我不会使用的数据。我正在获取每个 Play Script(包括它的 Spoken Lines 等),以便我拥有 Play Script “Name”和“Description”属性来填充 Recycler。

在过去,我只需要“从 Play_Script 中选择 ID、名称、描述”,一旦用户做出选择,我就会使用 ID 作为密钥来获取我需要的所有其他内容。我怀疑我在数据实体的设计中遗漏了一些基本的东西,但无法想出任何关键字来让我搜索这种常见任务做得很好(/根本)的例子。

请问你能帮这个菜鸟解决他的第一个问题吗?

干杯,Z

5 月 15 日更新: 虽然我没有得到回应,但从我最近几周阅读的内容(例如重新依赖注入)来看,我怀疑在 Android 开发中没有针对此类事情的一揽子方法。人们似乎通常要么检索大量数据,然后使用他们需要的东西,要么构建多个 Web 服务 API 来返回稀疏数据,其中包括客户端可以在需要时使用来扩展的密钥。因此,例如,您可以同时制作“plays_light”和“plays_detail”Get API。

标签: javamysqlrestclassandroid-mvvm

解决方案


我的解决方案与我 5 月的更新完全相同 - 即扩展 Web API 并提供许多返回不同粒度信息的类似调用。它不是特别优雅,我怀疑可能有更好的方法,但它有效。总的来说,我发现用户往往需要更少的父实体细节,而更多的是当我们获得单个子/孙子时。

我现在明白为什么有些应用程序这么慢了:在 Web 服务设计中很容易变得懒惰,只返回大量数据——客户端只会使用其中的一部分——并通过说服自己使用单个 API 来证明这一点将是普遍适用的,因此对于拿起我的代码的人来说更容易理解。

同样,这可能是我的经验不足,但我发现通过 API 调用检索到的 Android 端的关系数据的本地缓存非常笨拙——大量存储外键,然后重新解析 json 以将数据放入 SQLite 表中。我希望 Dagger 在简化这方面会比到目前为止更有用。实际上,为了保持理智,我解开了一大堆与 Dagger 相关的代码。不确定我是否完全成功!

更好的答案仍然非常受欢迎。Z


推荐阅读