我一直在使用Clean Architecture开发一个android应用程序,并且我读到,对于每一层使用不同的对象是一种好习惯。但是,我正在应用程序中执行此操作,并且我不确定是否应该为每个层(数据,域和表示形式)创建实体,并为每个层创建映射器。
我一直在为数据层使用映射器和实体,并将这些对象“映射”到域层中的Java对象并将这些对象传递给表示,那么什么是最好的方法?我的意思是,在Clean体系结构中使用最佳实践是什么,并遵循数据层的数据流(例如,从API获取数据)并最终在UI中显示此数据。
谢谢!
答案 0 :(得分:1)
好,让我们从“获取用户信息”的简单用例开始,业务需求指定您应尝试从API提取新数据,如果不可能,请从缓存中获取数据(如果有)。
FetchUserInfoUseCase
并等待接收UserInfo
数据类,现在我们已进入数据层 。FetchUserInfo
用例将使用UserRepository
请求此数据实体。UserRepository
将尝试使用UserRemoteDataSource
,一旦失败,将退回到使用UserLocalDataSource
。UserRemoteDataSource
和UserLocalDataSource
都返回UserInfo
数据类。Retrofit
远程的,也许是Room
的本地。Retrofit
来获取数据,该数据通常会返回一个POJO Gson
对象作为域实体,这需要映射到UserInfo
数据实体,为此,我们需要一个映射器。Room
的情况下,它是一个数据库域实体,还需要映射到我们的UserInfo
数据类,因此需要另一个映射器。UserInfo
,并将其报告回数据层的UserRepository
,而该实体又将报告回{ {1}},它将返回到表示层。FetchUserInfoUseCase
数据实体类映射到一个更简单的UI版本以传递到视图,例如UserInfo
表示实体。希望可以使事情变得简单一些。