Repository设计
前提:WebService只是数据的增删改查接口,不是业务接口。如果是业务接口那WebApi应当等价于UseCase。
方案一

Repository职责:
- 从本地数据中增删改查数据
 - 从远程数据中增删改查
 
具体方法如下:
- addToLocal()
 - deleteLocal()
 - queryLocal()
 - updateLocal()
 - addToRemote()
 - deleteRemote()
 - queryRemote()
 - updateRemote()
 
常见UseCase:
- 本地数据的增删改查
 - 远程数据的增删改查
 - 本地数据同步到远程
 - 远程数据同步到本地
 
由于数据同步机制属于和具体场景强相关的,所以不放在Repository中,应当由UseCase实现。
方案二
方案一发现一个问题:Repository的接口基本上就是本地数据和远程数据的透传,那能不能将其拆分为两个独立的Repository

LocalRepository职责:本地数据的增删改查
- add()
 - query()
 - delete()
 - update()
RemoteRepository职责:远程数据的增删改查 - add()
 - query()
 - delete()
 - update()
 
常见UseCase:
- 本地数据的增删改查
 - 远程数据的增删改查
 - 本地数据同步到远程
 - 远程数据同步到本地
 
虽然清晰了,但使用起来感觉不对,usecase得关注两个数据源?找找理由:
- 对UseCase来说,应当只有一个单一数据源的概念,Local和Remote只是数据类型不同,并不是说来自不同的数据源。
 - 方案二的数据同步逻辑实现,会让数据类型转换添加一个不必要的Model转换
- 方案一:ApiBean->DaoBean
 - 方案二:ApiBean->Model->DaoBean
 
 
所以最终结论:还是方案一比较好