3

我想在一个新的应用程序中使用干净的架构,到目前为止它工作得很好。我将应用程序分为 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 依赖项。

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

4

1 回答 1

1

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

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

关于Parcelable本身,考虑到它只是为模型对象添加了额外的方法,以使 Android OS 能够在不同系统组件之间序列化/反序列化数据。因此,由于您在域级别的测试不是由 Android 操作系统运行的,因此它们不应触及此方法,并且不会影响您的测试。

考虑一下,Android 中其他几个在单元测试中不可用的 API,比如UriDateUtilsSparseArray等等……
我认为这Roboelectric可以派上用场,模拟这些 Android 原语。

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

于 2017-02-24T13:12:39.067 回答