해결된 질문
23.08.16 17:07 작성
·
215
0
안녕하세요.
코드를 작성하다가 궁금증이 생겨 질문을 올립니다.
사용자 입장에서 인터넷이 되나 안되나 비슷한 경험을 제공하려고 합니다. 아래 데이터 흐름을 예로 들겠습니다.
뷰모델
학교 디테일 정보 fetch use case
학교 repository(interface fetch)
remote data source - 학교repository확장
local data source - 학교 repository 확장
이런 상황에서 인터넷이 되면 4번에서 데이터를 가져오고 안되면 5번에서 가져오려고 합니다.
이럴때 인터넷이 되는지 안되는 지 판단하는 클래스는 use case 내 execute 안에서 하는 것이 옳은지 아니면 use case 와 data source 사이에 로컬 및 리모트 데이터 소스를 주입 받는 새로운 클래스를 새로만드는 것이 옳은지 아니면 다른 접근이 있는 지 궁금합니다.
또한 인터넷이 안되는 것 뿐만 아니라 인터넷이 되는 상황에서도 로컬의 값과 서버의 값이 같으면 로컬 데이터를 사용하도록 하고 싶은데 어디 클래스에서 어떤 방식으로(더티비트?) 구현하는 것이 좋을 지 궁금합니다.
감사합니다.
답변 2
1
2023. 08. 16. 17:22
이럴때 인터넷이 되는지 안되는 지 판단하는 클래스는 use case 내 execute 안에서 하는 것이 옳은지 아니면 use case 와 data source 사이에 로컬 및 리모트 데이터 소스를 주입 받는 새로운 클래스를 새로만드는 것이 옳은지 아니면 다른 접근이 있는 지 궁금합니다.
=> use case 내에서 하면 될 것 같습니다.
예전에 실시간 인터넷 연결상태 모니터링 하는 예제를 유튜브에 올렸는데 참고하시기 바랍니다.
https://youtu.be/-MK4eCjAOMg
여기서 실시간이 아닌 요청시마다 확인으로 바꾸면 될 것 같습니다.
하시려면 로직이 Flutter 중급 2편 - 미국 주식 앱을 보셨다면 한번 가져온 데이터를 DB에 넣어놓고 캐시로 사용하는 로직과 비슷하네요. DB에 있으면 DB 내용을 가져오고, 없으면 인터넷에서 가져오는.
또한 인터넷이 안되는 것 뿐만 아니라 인터넷이 되는 상황에서도 로컬의 값과 서버의 값이 같으면 로컬 데이터를 사용하도록 하고 싶은데 어디 클래스에서 어떤 방식으로(더티비트?) 구현하는 것이 좋을 지 궁금합니다.
=> 마찬가지로 use case 내에서 구현하면 됩니다.
인터넷이 되는 상황에서도 결국은 서버의 내용을 모두 읽어와서 비교 후 같으면 로컬 값을 사용하므로,
정리하면 인터넷이 되면 로컬 DB에 저장 후 사용,
인터넷이 안 되면 로컬 DB를 사용 이지 않을까 싶습니다.
0