네트워크 라이브러리 Sandwich

2

오늘 다뤄볼 내용은 SandWich에 관해서이다.
샌드위치 라이브러리

우리가 네트워크 처리를 할때 Retrofit을 자주 이용할것이다. 하지만 매우 번거롭게도,
Http에 대한 요청과 exception에 대한것을 전부 캐치하는것에 방대한 시간이 든다.

😢😢많은 시간이 소요된다.

특히 flow를 활용했을땐 특히 하나하나 요청에대한 처리를 해줘야한다.

하지만 Sandwich를 사용하면 어떨까?

성공과 실패를 핸들링 할수있다.


    @WorkerThread
    fun getLoginData(
        wrkr_id: String,
        wrkr_password: String,
        onSuccess: () -> Unit,
        onError: (String) -> Unit,
        onException: (String) -> Unit
    ) = flow<MtInspMan> {
        val response = waterService.inspManlogin(wrkr_id, wrkr_password)
        response.suspendOnSuccess {
            data.whatIfNotNull { response ->
                onSuccess()
                emit(response)

            }
        }
            .onError {
                onError(message())
            }
            .onException {
                onException(message())
            }

    }.flowOn(Dispatchers.IO)

현재 repository에 대한 코드이다.
Sandwich를 사용하지 않았다면 네트워크에서 일어나는 수많은 Error처리를 개발자가 담당해야 한다.

또한 값이 제대로 넘어오지않아도 Retrofit에선 성공으로 보기때문에 거기에대한 fitering도 생각해야한다.

하지만, Sandwich를 쓰면,

            waterepository.getLoginData(id.value, password.value,
                onSuccess = {
                    isLoding.value = false
                    event(Event.successEvent("success"))
                },
                onError = { error ->
                    isLoding.value = false
                    event(Event.errorEvent("아이디나 비밀번호가 틀립니다."))
                },
                onException = {
                    isLoding.value = false
                    event(Event.errorEvent("서버가 불안정합니다. 다시 시도해 주세요"))
                }
            ).collect {
                it.toString()
            }

위의 Viewmodel 코드가 단순히 핸들링된 Error와 Success, Exception만
처리하면 되기때문에 매우 간단해진다.

profile
쉽게 가르칠수 있도록 노력하자

0개의 댓글