drakeet / MultiType

Flexible multiple types for Android RecyclerView.
Apache License 2.0
5.76k stars 751 forks source link

Savable 的作用? #17

Closed ErQi closed 8 years ago

ErQi commented 8 years ago

这个接口是否有点鸡肋? 望解答.

drakeet commented 8 years ago

这是一个重要的可选接口,提供了 Content 的序列化方案,使得 Content 能够转为 byte[] 存储于数据库中,详情可以看我的 TimeMachine 应用:

MessageStore.java#L196

TimeMachine 是我另一个项目,其中的 transformer 模块使用了 Google 的 Agera 和我的 MultiType.

drakeet commented 8 years ago

实现了 SavableTextContent:

https://github.com/drakeet/TimeMachine/blob/master/timemachine/src/main/java/me/drakeet/timemachine/message/TextContent.java

通过 Savable,我们可以把任意 Item (可能包含不同的 ItemContent 子类对象),统一存储到一个数据库表中,不需要新增字段也不需要修改表结构。

ErQi commented 8 years ago

谢谢解答,我想我需要去把你的TimeMachine项目去分析一遍才能理解其重要性.

drakeet commented 8 years ago

简单说,Savable 使得我们能够不修改数据库字段和表结构的情况下,容纳任意类型数据,这和 MultiType 的设计初衷是一样的:做一个新需求,不需要修改任何旧的代码,只要增加新代码即可。

ErQi commented 8 years ago

谢谢,也就是说这接口主要是针对于对本地存储的兼容性所设计,在不考虑本地存储的情况下是否使用该接口并不影响. 这样么?

drakeet commented 8 years ago

它是一个可选接口,如果你不需要存储,或者想自己设计存储方案,完全可以无视它、不必实现它。

ErQi commented 8 years ago

谢谢解答,我想我理解其设计含义了.

drakeet commented 8 years ago

这个接口将在 2.2.0 正式版中删除,感谢反馈。