不那么完美的Model数据层架构

2016年5月Piasy大神介绍了一种颇为不错的Model数据层架构(地址),文中采用了SqldelightSqlbriteAutoValue及其扩展的方式来进行持久层到内存对象的转化,我也一直在自己的项目中进行实践,效果很好。

直到今天,我对项目进行重构过程中,发现其中对于Parcelable处理的依赖库auto-value-parcel和AIDL存在着比较严重的兼容问题。

AIDL要求所有自定义的类型均要实现Parcelable接口,且生成的代码中需要该类型直接拥有一个CREATOR静态变量,但实际上auto-value-parcel库生成的CREATOR静态变量存在于AutoValue_XXX类中,直接在AIDL中引用自定义类型会报错。

这个问题在auto-value-parcel库中也有issue提到,目前没有好的解决方法。

我的解决方案就是对于数据层再使用ContentProvider包装一层,即便在不同进程中写入写出也是安全可靠的,AIDL中使用Uri进行传输。