【问题标题】:Clean Architecture Repository清洁架构存储库
【发布时间】:2019-04-17 05:52:27
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    • 模块domainUserItem
    • 模块 repository 包含 2 个数据源:模块 remote(改造 - 带有 UserResponse)和模块 local(房间 - 带有 UserEntity)。 repository 模块内还有一个 UserMapper

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

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

    借助 3 种不同的数据模型,您可以轻松更改 domain 中的数据,而不必担心 localremote 中的任何重大更改

    【讨论】:

      猜你喜欢
      • 2020-07-07
      • 2017-10-16
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 2021-06-17
      • 2021-02-12
      • 1970-01-01
      相关资源
      最近更新 更多