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 应用程序之间共享数据层和模型层的最佳方法