Android CleanArchitecture 域模块和 AutoValue

Android CleanArchitecture Domain module and AutoValue

我想在新应用程序中使用干净的架构,到目前为止效果很好。我将应用程序结构化为 3 个模块(演示、数据和域),如下例所示:Android-CleanArchitecture

我的域模块中有一些实体。其中之一是用户。

    public class User {

        private String name;

        public String name () {
            return name;
        }

        public static class Builder {
            ...
        }
    }

我想使用带有一些扩展的 AutoValue 来摆脱样板代码。其中一个扩展名是 AutoValue Parcel。现在我需要实现 android.os.Parceable 接口,它是 android 的一部分,不能在我的域模块中使用,因为它是 Android 依赖项。

实现这个的正确方法是什么?

使用 Android 实现清晰架构的理想有点困难,因为 Android 是一个有自己规范的完整框架,即使在基本语言级别也是如此。

我认为,由于理想的特定工具免费级别主要用于测试目的,因此 - 这应该是处理 Android 时考虑的主要目标。

关于 Parcelable 本身,认为它只是为模型对象添加了额外的方法,以使 Android OS 能够 serialize/deserialize 不同系统之间的数据组件。因此,由于您在域级别的测试没有 运行 by Android OS,他们不应该触及此方法,它不会影响您的测试。

考虑一下,Android 中的其他几个 API 在单元测试中不可用,例如 Uri, DateUtils, SparseArray 等等...
这就是我认为 Roboelectric 可以派上用场的地方,通过模拟这些 Android 原语。

说了那么多...有了 Clear Architecture,您的域层应该与表示层分开,所以基本上您会在 both 层(可以共享接口)并且它们都可以使用 AutoValue,但是,只有在演示级别你才能实现 Parcelable 接口(这是需要它的接口,因为在这个级别你将与系统交互并使用 Parcel)。 域级别中没有 Android 依赖项并不是这种分离的唯一考虑因素,请记住,表示级别可能会添加与域级别无关的信息。