android - 如何将模型/POJO 与 android 数据绑定、房间和改造一起使用?
问题描述
我正在研究 android 中的 Room 和 Databinding,我向我的朋友展示了我在那一刻之前所做的事情,然后他说我的模型/POJO 类没有遵循最佳实践,因为我不应该使用相同的模型/POJO执行请求(改造),保存在数据库(房间)中并进行数据绑定。
我的模型/POJO:
@Entity(tableName = "posts")
class Post : BaseObservable() {
@ColumnInfo(name = "idPost")
@PrimaryKey
var id: Int = 0
var userId: Int = 0
@Bindable
var message: String = ""
set(value) {
field = value
notifyPropertyChanged(BR.message)
}
@SerializedName("created_in")
@Bindable
var createdIn: Long = 0
set(value) {
field = value
notifyPropertyChanged(BR.createdIn)
}
@Bindable
var image: String? = ""
set(value) {
field = value
notifyPropertyChanged(BR.image)
}
}
当我提出请求并保存在数据库中时
fun getPostsFromAPI(onSuccess: (posts: MutableList<Post>) -> Unit, onError: (error: Throwable) -> Unit) {
PostsNetwork.requestPosts(
{ posts ->
launch {
withContext(Dispatchers.IO) {
MyApplication.database.postsDAO().insertPosts(posts)
}
onSuccess(posts)
}
},
{
onError(it)
}
)
}
通过数据绑定,我试图使用两种方式的数据绑定。
我是否必须为每件事(数据绑定、改造、房间)提供 3 个实体?如果是这样,最好的方法是什么?
解决方案
我将首先在您的域包中创建一个域模型 pojo,例如在清洁架构和数据传输对象模型中,以便在各个包中进行改造、房间等。然后转换对象使用带有函数的 Mapper 类,该函数接受一个对象并转换为另一个对象。
推荐阅读
- cuda - 无法在 Ubuntu 16.04 上安装 CUDA
- flutter - 在颤动中滚动到水平ListView上的某个索引
- javascript - 如何将 NPM 包导入浏览器的控制台
- ios - React Native iOS 的无效注册
- java - 将 /Date(XXXXXX)/ 转换为像 YYYY-MM-DD 这样的日期
- amazon-web-services - 使用 AWS API Gateway 继承 OpenAPI / Swagger 模型
- javascript - 我会解释这个函数 .map ()
- java - 如何将 AWS KMS 与 java sdk 结合使用,以便能够将 IAM 凭证解析到 ECS 环境中?
- cognos - 突发 COGNOS 报告包括 CC 或 BCC 可能吗?
- android - 附近连接发现在 Android10 上引发错误 8036