Android 清洁体系结构存储库

Android 清洁体系结构存储库,android,repository,android-architecture-components,clean-architecture,Android,Repository,Android Architecture Components,Clean Architecture,使用谷歌推荐的架构构建应用程序似乎是分离和模块化应用程序的好方法。话虽如此,我经常会遇到这样一个事实,即在缓存来自API的数据时,可能需要对远程和本地数据源使用不同的模型。(我发现swankjesse的评论也是如此) 不同的模型看起来不错,但拥有具有多个嵌套级别的复杂模型似乎是一件麻烦事(将本地和远程模型映射到一个通用的数据层实体) 另一个论点是,当从网络请求数据时,API可能会响应JSON映射分页和内部的其他内容(这是ViewModel(只是一个示例)加载更多数据所需要的)。 拥有一个带有本地

使用谷歌推荐的架构构建应用程序似乎是分离和模块化应用程序的好方法。话虽如此,我经常会遇到这样一个事实,即在缓存来自API的数据时,可能需要对远程和本地数据源使用不同的模型。(我发现swankjesse的评论也是如此)

不同的模型看起来不错,但拥有具有多个嵌套级别的复杂模型似乎是一件麻烦事(将本地和远程模型映射到一个通用的
数据层
实体)

另一个论点是,当从网络请求数据时,API可能会响应JSON映射分页和内部的其他内容(这是
ViewModel
(只是一个示例)加载更多数据所需要的)。 拥有一个带有本地和远程数据源的
存储库
看起来有点像是被破坏了(本地用对象列表响应,远程用包含对象列表的类响应)

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

我假设您有这样的模块,以及相应的数据模型:

  • 模块
    用户项
  • 模块
    存储库
    包含两个数据源:模块
    远程
    (改装-使用
    用户响应
    )和模块
    本地
    (房间-使用
    用户实体
    )。
    存储库
    模块中还有一个
    UserMapper
为什么我们需要3种不同的数据模型来表示用户?因为在3个这样的模块中,数据具有不同的格式和注释。例如,
用户
将有一个
生日
字段:

  • 模块
    远程
    类用户响应(@SerializedName(“生日”)val birthdayDate:String)
  • 模块
    本地
  • 类用户项(val birthdayDate:Long)
使用3种不同的数据模型,您可以轻松更改
域中的数据
,同时担心
本地
远程

@Entity(tableName = "users")
class UserEntity(
  @ColumnInfo(name = "birthday") val birthday: Long
)