Android 客户端应用程序中“数据层”的最佳实践

Posted

技术标签:

【中文标题】Android 客户端应用程序中“数据层”的最佳实践【英文标题】:best practices for "data layer" in android client apps 【发布时间】:2012-11-01 13:24:19 【问题描述】:

这是一个设计/最佳实践问题..

我是 android 开发新手,对网络/移动解决方案基本上是新手。

那么,我的问题是 - 在组织从远程服务器获取数据的 android 应用程序结构时的最佳做法是什么?

对服务器的请求应该进入一个与服务器进行通信的类(获取和发布请求),还是应该将我的请求视为数据源,这意味着每个数据类都自己管理它?

或者我应该有更多的抽象级别 - 一个用于获取数据,另一个用于使用某些接口但不知道源数据来自何处的模型?

我很好奇经验丰富的 Android 开发人员如何处理这些设计问题...

【问题讨论】:

【参考方案1】:

Virgil Dobjanschi presentation 是如前所述的一个很好的资源,它基本上告诉您从后台服务运行您的请求,这样活动就不会被破坏,并尽早将您的数据存储在数据库中。

更多技术细节,我的做法是将应用分为三个组件:

1- 封装 HTTP 请求和响应处理的库(使用 ApacheHTTP),它可以处理简单的请求/响应和可能涉及 cookie(可能是登录所必需的)和修改 HTTP 标头的高级功能。

2- Marshal/Unmarsha 层,在这里我解析服务器数据(例如 XML 或 JSON)并将其转换为我的应用程序的其余部分将处理的对象(即模型)。

3- 持久层。

根据 Dobjanschi 的介绍,我通常让数据请求在服务中运行而不是在活动内的线程工作者中。

【讨论】:

这是很棒的视频,谢谢!现在,我正在尝试实现它,特别是模式 B (activity-> contentProvider -> ServiceHelper -> Service -> Rest -> Processor),现在我很难弄清楚应该如何完成。我不明白这项服务的粒度是什么,例如,如果我有我的模型对象或名为 User、UserDetails、City、Category 等的数据库表......我是否应该为所有“数据类型”提供这些类,还是专业的? 比如我应该有UserProcessor、CategoryProcessor(等)、UserService、CategoryService(等)UserContentProvide、CategoryContentProvider(等)吗?【参考方案2】:

使用本次 Google I/O 演讲中介绍的 3 种模型之一。它为您提供建议,帮助您完成应用架构定义的整个过程。它还可以防止你犯初学者常犯的常见错误:

http://www.youtube.com/watch?v=xHXn3Kg2IQE

这篇文章也将帮助你:

Need sample Android REST Client project which implements Virgil Dobjanschi REST implementation pattern

【讨论】:

以上是关于Android 客户端应用程序中“数据层”的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

在 winforms 和 web 应用程序之间共享数据层和模型层的最佳方法

在 Android 应用程序中实现客户端 <-> 服务器 <-> 数据库架构的最佳方式?

打破业务逻辑和数据层似乎重叠的最佳设计? [关闭]

Wear OS 上 Firebase 授权的最佳实践

Android最佳实践——深入浅出WebSocket协议

使用 webSockets 避免 Nagle 算法影响的最佳方法?