Внедрение картографа и проверка сети в чистой архитектуре Uncle BobAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Внедрение картографа и проверка сети в чистой архитектуре Uncle Bob

Сообщение Anonymous »

Я следую чистой архитектуре дяди Боба. Полный исходный код загружен на Github.
Я обсуждал с моим коллегой размещение картографов в dataSource или Repository. Он сказал, что если на каком-либо уровне изменится наш удаленный клиент API или произойдут какие-либо другие изменения. Нам нужно изменить только источник данных. Реализация верхнего уровня не будет затронута.
Но я изучал, что сопоставители должны обрабатываться на слоях репозитория.

Есть ли UseCase , репозиторий и источники данных возвращают один и тот же тип возвращаемого значения?


На каком уровне репозиторий или источник данных следует внедрить Mapper?< /p>


Проверку сети следует выполнять на уровне репозитория или уровня источника данных?

Уровень домена
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»