gpt4 book ai didi

android - 处理实体和 Pojo

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:02 27 4
gpt4 key购买 nike

对 Room 来说仍然是新手,虽然我发现的大多数教程都与简单的表和 CRUD 操作有关,但我坚持要改进它。

让我们来看看这个示例结构。

用户实体

@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;
}

第一个问题:是否应该扩展Entity 对象来替代POJO?或者将实体和 POJO 作为单独的类?

从 Room 设置扩展,我看到 User POJO 的方式是:

public class User{
private long id;
private Role role;
}

基本上,如果用户作为来自 Web 服务的 json 响应出现,或者由用户在应用程序的输入字段中输入,则此设置应该都有效。

然而,这引发了第二个问题:如何插入和检索用户信息?。插入似乎是可能的,因为可能有类似

userDAO.insertRole(userId)

但是如何使用 Room 和 userDAO 获取 User 的 Role 对象呢?我发现做这样的事情是不合适的:

user = userDao.getUser(userId)
user.setRole(roleDao.getRole(user.getRoleId)

第三个问题:让表列带有_(例如role_id)似乎是一个好习惯,但在java中,建议将roleId作为类属性。如果 @Query 的结果,例如 select role_id from... 和带有 roleId 字段的 POJO,将失败,因此查询需要select role_id as roleId... 让它工作。在 sqlite 中的表/列名称中使用驼峰式大小写是一种好习惯吗?

最佳答案

你打算作为 POJO 的东西,可能可以看作是一种 View 模型。一般来说,统一/链接实体和 pojo 不是一个好主意,因为您只是在为实体建立更广泛的可见性/范围,这是不必要的,并且可能会导致潜在的问题。

假设您有一些客户端需要一些不同的数据可视化,例如假设您有一个公开车辆数据的网站并且您已经使用 metric 系统实现了所有内容,所以对于距离,您有km,表示速度 km/h 等。现在您的公司获得了来自英国的大客户,他们希望您以 imperial 格式向他们提供数据。现在要做什么?可能实现反序列化/转换过程,该过程获取值并根据用户的上下文(无论他们使用的是 metric 还是 imperial 系统)转换它们。如果您的实体和 View 模型对象基本相同,可能会出现什么问题?真的很糟糕。你的事情真的很紧密,你应该为客户端的序列化实现不同的 getter,对于 db..它可能会变得一团糟。

相反,如果将两者分开,您将拥有负责处理数据库的实体,这是变异系数小的标准程序,而另一方面,您将拥有 View 模型,这很可能需要经常修改,毕竟它是预期的,因为它是最终用户的接口(interface)。

关于android - 处理实体和 Pojo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50956975/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com