해결된 질문
23.09.06 14:20 작성
·
224
0
안녕하세요. 수강 잘 하고 있습니다.
dio package를 사용하여 네트워크 처리를 하고 있는데 에러 처리관련해서 어디 부분에서 하는 것이 좋을 지 고민하다가 질문 올립니다.
현재는 viewmodel -> usecases -> usecase -> repository -> remoteDataSource -> dio 이렇게 의존성을 받고 있고, remoteDatasource 에서 필요한 데이터만 List<StudentModel> 이런식으로 뷰모델까지 보내고 있습니다. 그러나 네트워크 에러가 발생했을 때는 remoteDataSource에서 List<StudentModel> 이 아닌 실패했을 떄 모델을 전송하게 되는데 (ErrorModel) 그렇게 되면 뷰모델까지 타입이 동적으로 전해지기때문에 이게 맞나 생각이 들기도 합니다.
혹은 dio 부분에서 400 500 에러 일때 alert 를 띄울까 생각을 했지만 그렇게 되면 context를 dio 까지 끌고 가야되고 전역으로 관리해야 되서 맞지 않다고 생각했습니다. 실제로는 어떻게 처리하는 것이 현명할지 질문드립니다. 감사합니다.
답변 1
0
2023. 09. 06. 22:59
원하시는 해답은 중급 1편 - 클린아키텍처의 이미지 검색 앱에서 이미 다루었는데요.
Result 클래스를 만들어서 활용하시면 됩니다.
freezed 를 사용한 코드로 예시를 들면 다음과 비슷한 형태로 하시면 되겠습니다.
@freezed
sealed class Result<T> with _$Result<T> {
const factory Result.success(T data) = Success;
const factory Result.error(ErrorModel errorModel) = Error;
}
요즘은 freezed 보다 dart 공식 문법을 활용하는 것을 추천하오니 관련 내용 유튜브에 올린 영상을 참고하시기 바랍니다. https://youtu.be/Cl9FcNNbiu8?si=I6teJPb0K8WOG5-4
또한, dio 의 에러 처리의 경우에 alert 을 띄우려는 경우에도, 역시 중급 1편의 이미지 검색 앱에서 네트워크 에러 처리를 했던 것 처럼 UI 까지 이벤트를 Stream을 통해 끌고 올라와서 UI 에서 alert 을 띄우는 것을 추천합니다. Context 를 UI 보다 아래로 내려보내는 것은 대표적인 안티패턴이니까요.
이해가 안 되는 부분이 있다면 또 질문 주시기 바랍니다.
2023. 09. 07. 12:40
제가 필요했던 답변입니다. 감사합니다!!