表示层中的数据映射器

时间:2018-11-05 22:42:52

标签: android clean-architecture

我一直在使用Clean Architecture开发一个android应用程序,并且我读到,对于每一层使用不同的对象是一种好习惯。但是,我正在应用程序中执行此操作,并且我不确定是否应该为每个层(数据,域和表示形式)创建实体,并为每个层创建映射器。

我一直在为数据层使用映射器和实体,并将这些对象“映射”到域层中的Java对象并将这些对象传递给表示,那么什么是最好的方法?我的意思是,在Clean体系结构中使用最佳实践是什么,并遵循数据层的数据流(例如,从API获取数据)并最终在UI中显示此数据。

谢谢!

1 个答案:

答案 0 :(得分:1)

好,让我们从“获取用户信息”的简单用例开始,业务需求指定您应尝试从API提取新数据,如果不可能,请从缓存中获取数据(如果有)。

  • 表示层通常将执行FetchUserInfoUseCase并等待接收UserInfo数据类,现在我们已进入数据层
  • FetchUserInfo用例将使用UserRepository请求此数据实体。
  • UserRepository将尝试使用UserRemoteDataSource,一旦失败,将退回到使用UserLocalDataSource
  • UserRemoteDataSourceUserLocalDataSource都返回UserInfo数据类。
  • 现在,进入本地和远程源的实际实现,进入域层,在现实生活中,它们可能是Retrofit远程的,也许是Room的本地。
  • 让我们说远程数据源将使用Retrofit来获取数据,该数据通常会返回一个POJO Gson对象作为域实体,这需要映射到UserInfo数据实体,为此,我们需要一个映射器。
  • 本地数据源也是如此,在Room的情况下,它是一个数据库域实体,还需要映射到我们的UserInfo数据类,因此需要另一个映射器。
  • li>
  • 到目前为止,两个数据源都将返回统一数据实体UserInfo,并将其报告回数据层UserRepository,而该实体又将报告回{ {1}},它将返回到表示层
  • 然后,表示层可以将FetchUserInfoUseCase数据实体类映射到一个更简单的UI版本以传递到视图,例如UserInfo表示实体。

希望可以使事情变得简单一些。