Android 处理实体和POJO
虽然我发现的大多数教程都与简单的表格和积垢操作有关,但我还是对Room比较陌生,所以我一直坚持改进这一点 让我们以这个结构为例 用户实体Android 处理实体和POJO,android,android-sqlite,android-room,android-architecture-components,Android,Android Sqlite,Android Room,Android Architecture Components,虽然我发现的大多数教程都与简单的表格和积垢操作有关,但我还是对Room比较陌生,所以我一直坚持改进这一点 让我们以这个结构为例 用户实体 @Entity(tableName = "users") public class UsersEntity{ @PrimaryKey(autoGenerate = true) private long id; @NonNull private String name; @NonNull private lo
@Entity(tableName = "users")
public class UsersEntity{
@PrimaryKey(autoGenerate = true)
private long id;
@NonNull
private String name;
@NonNull
private long roleId;
}
角色实体
@Entity(tableName = "roles")
public class RolesEntity{
@PrimaryKey(autoGenerate = true)
private long id;
@NonNull
private String name;
}
第一个问题:实体
对象是否也应该扩展以替换POJO
?或者将实体和POJO作为单独的类
从房间设置扩展,我看到用户POJO的方式是:
public class User{
private long id;
private Role role;
}
基本上,如果用户是来自web服务的json响应,或者用户在应用程序的输入字段中输入json响应,那么这种设置应该可以工作
然而,这提出了第二个问题:如何插入和检索用户信息?。
插入似乎是可能的,因为可能有
userDAO.insertRole(userId)
但是如何使用Room和userDAO获得用户的角色
对象呢?
我觉得这样做不合适:
user = userDao.getUser(userId)
user.setRole(roleDao.getRole(user.getRoleId)
第三个问题:将表列设置为u(例如
role\u id
)似乎是一种很好的做法,但在java中,建议将roleId
作为类属性。如果一个@查询的结果
例如从…
中选择角色id,以及带有角色id的POJO
字段将失败,那么查询需要选择角色id作为角色id…
才能工作。在sqlite中的表/列名中使用camel大小写是一种好的做法吗?您想要的POJO,可能可以看作是一种视图模型。一般来说,统一/链接实体和POJO是一个坏主意,因为您只是为实体创建了一个很长很宽的可视性/范围,这是不必要的,并且可能会导致潜在的问题
假设您有一个客户机,它需要一些不同的数据可视化,例如,假设您有一个网站公开车辆数据,并且您使用metric
系统实现了所有功能,因此对于距离km
,对于速度km/h
,等等。现在,您的公司从英国获得了一个巨大的客户,他们希望您以imperial
格式向他们提供数据。现在该怎么办?可能会实施反序列化/转换过程,该过程将获取值并根据用户的上下文进行转换(无论是使用公制
还是英制
系统)。如果实体和视图模型对象基本相同,可能会出现什么问题?真糟糕。你们有非常紧密的耦合,你们应该为客户机和数据库实现不同的getter序列化。它可能会变得一团糟
相反,如果将两者分开,您将拥有负责处理数据库的实体,这是一个标准过程,具有较小的变异系数,另一方面,您将拥有视图模型,该模型很可能需要频繁修改,毕竟这是意料之中的,因为它是最终用户的界面