干净的架构存储库

时间:2018-11-14 09:49:49

标签: android repository android-architecture-components clean-architecture

使用Google推荐的体系结构构建应用程序似乎是将应用程序分离和模块化的一种好方法。话虽这么说,但我经常发现,当缓存来自API的数据时,可能需要为远程和本地数据源使用不同的模型。 (我发现swankjesse的评论here表示相同)。

不同的模型看起来不错,但是拥有具有多个嵌套级别的复杂模型似乎很麻烦(将本地和远程模型映射到公共MembersRoleProvider实体)。

另一个论点是,当从网络请求数据时,API可能会以JSON映射分页和内部的其他内容作为响应(data layer(仅作为示例)需要它来加载更多数据)。 具有本地和远程dataSources的ViewModel看起来有点糟(本地使用对象列表进行响应,远程使用包含对象列表的类进行响应)。

我见过的所有示例应用程序都演示了如何使用简单的POJO(在生产代码中这几乎是不现实的)。 有解决这个架构难题的想法吗?

1 个答案:

答案 0 :(得分:0)

我假设您有具有相应数据模型的此类模块:

  • 带有domain的模块UserItem
  • 模块repository包含2个数据源:模块remote(改进版-带有UserResponse)和模块local(房间-带有UserEntity)。 UserMapper模块中还有一个repository

为什么我们需要3个不同的数据模型来表示User?因为在3个这样的模块中,数据具有不同的格式和注释。例如,User会有一个birthday字段:

  • 模块remoteclass UserResponse(@SerializedName("birthday_date") val birthdayDate: String)
  • 模块local
@Entity(tableName = "users")
class UserEntity(
  @ColumnInfo(name = "birthday") val birthday: Long
)
  • domainclass UserItem(val birthdayDate: Long)

使用3种不同的数据模型,您可以轻松更改domainlocal中的数据,而无需担心remote

中的数据