Android CleanArchitecture域模块和AutoValue

时间:2017-01-24 12:03:45

标签: android auto-value clean-architecture

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

实现此目的的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

对Android而言,实现Clear Architecture的理想有点困难,因为Android是一个完整的框架,即使在基本语言级别也有自己的规范。

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

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

请考虑Android中的其他几个API,这些API在单元测试中不可用,例如UriDateUtilsSparseArray等等...... 通过嘲笑这些Android原语,我认为Roboelectric可以派上用场。

说完所有......使用Clear Architecture,你的域级别应该与Presentation级别分开,所以基本上你会在两个层(可以共享界面)和两者都有模型对象他们可以使用AutoValue,但是,只有在表达级别,您才能实现Parcelable接口(需要它的接口,因为在此级别您将与系统交互并使用{ {1}})。 考虑到这种分离,域级别中的Android依赖项不是唯一的考虑因素,即表示级别可能会添加与域级别无关的信息。