Я изучаю чистую архитектуру дяди Боба. Полный исходный код загружен на Github.
Возвращают ли UseCase, репозиторий и источники данных один и тот же тип возвращаемого значения?
На каком уровне следует внедрять Mapper: репозиторий или источник данных?
Проверку сети следует выполнять на уровне репозитория или на уровне источника данных?
Уровень домена
BaseUseCase.kt
abstract class BaseUseCase {
abstract fun execute(params: ParamsType): Flow
// Operator function to simplify calling the use case
operator fun invoke(params: ParamsType): Flow {
return execute(params)
}
}
// A class representing no parameters
object NoParams
LoginUseCase.kt
class LoginUseCase @Inject constructor(
private val loginRepository: LoginRepository
) : BaseUseCase() {
override fun execute(params: LoginRequestEntity): Flow {
return loginRepository.login(params)
}
}
LoginRepository.kt
interface LoginRepository {
fun login(params: LoginRequestEntity): Flow
}
Уровень данных
LoginRepositoryImpl.kt
class LoginRepositoryImpl @Inject constructor(
private val loginDataSource: LoginDataSource,
private val loginRequestMapper: LoginRequestMapper,
private val loginResponseMapper: LoginResponseMapper
) : LoginRepository {
override fun login(params: LoginRequestEntity): Flow {
val loginRequestDTO = loginRequestMapper.mapToDomainModel(params)
return loginDataSource.login(loginRequestDTO)
.map { result ->
result.map { loginResponseMapper.mapToDomainModel(it) }
}
}
}
Я изменил запрос и ответ LoginDataSource на Network DTO . Правильно ли я делаю. Как если бы API изменился, мне нужно только изменить источник данных
LoginDataSource.kt
interface LoginDataSource : BaseDataSource {
fun login(request: LoginRequestDTO): Flow
}
LoginDataSourceImpl.kt
class LoginDataSourceImpl @Inject constructor(
private val apiService: ApiService,
@IoDispatcher private val dispatcher: CoroutineDispatcher
) : LoginDataSource {
override fun login(request: LoginRequestDTO): Flow {
return flow {
emit(safeApiCall { apiService.loginAuthentication(request) })
}.flowOn(dispatcher) // Ensuring network call is on IO thread
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... chitecture