android - 在带有 Parceler 的 Android 中使用 CLEAN 架构

标签 android architecture parceler

我正在使用 CLEAN 架构中的项目工作,该项目分为“Presentation”、“Domain”和“Data”模块,其中 Domain 模块托管基本上是数据模型的“实体”具体到这个项目。此架构的一个示例是 here .

与其他两个模块不同,“Domain”是一个纯 Java 库模块,非常适合清晰度和测试,因为它没有 Android 开销,但这也意味着我现在无法使用像“Parceler”是非常特定于 Android 的。有解决办法吗?

最佳答案

Parceler 允许您在给定模块之外配置 bean,以通过 @ParcelClass 注释生成包装 Parcelable。这意味着您可以将给定的 bean 配置为数据层之外的 @Parcel 和表示层(或您想要的任何其他地方)。参见 http://parceler.org/#classes_without_java_source具体情况。

org.parceler:parceler-api 模块也是纯 Java,它不依赖于 Android api。因此,您应该可以自由地注释您的数据模块,而不会违反您正在寻求的 CLEAN 架构。但是,库的注释编译器部分 (org.parceler:parceler) 确实依赖于 Android API,因此您需要在特定于 android 的模块中运行它。这给您留下了以下内容:

  1. 在您的数据模块中包含 parceler-api 库并注释您的数据层 bean(@Transient@ParcelProperty 等)。如果您不需要任何特定配置,则可以避免将 parceler-api 作为依赖项包含在内。

  2. 将 parceler 和 parceler-api 库添加到您的 Android 特定模块(Presentation?)。

  3. 为数据模块中的每个类添加一个 @ParcelClass 注释,您希望将其作为 @Parcel 到任意类(Application?)。这将指示 Parceler 为 @ParcelClass 参数中标识的每个类生成一个 Parcelable

关于android - 在带有 Parceler 的 Android 中使用 CLEAN 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37313707/

相关文章:

java - 如果位置尚未固定,如何停止 GPS?

android - 为什么工作灯适配器不工作?

java - 当键盘被调用时删除 "Persistent Footer Button"- Material Design

android - Retrofit2 如何将/放在动态 baseUrl 的末尾?

architecture - 设计数据访问层

kotlin - 打包程序:无法找到类型io.realm.RealmList的读/写生成器

android - RealmProxy 类未在 Realm 5.0.0 中生成

java - Parceler:无法找到 ForeignCollection 类型的读/写生成器

oop - 比较存储库与提供者与服务

c++ - C头文件可以被视为接口(interface)吗?