#Data Layer Android Developer 공식문서
=> https://developer.android.com/topic/architecture/data-layer?hl=ko
Repository Pattern
-도메인 계층에서 필요한 기능만 제공
-데이터 방식이 설계에 영향을 미치는 걸 막아줄 수 있도록 가장 상위레벨에서 지켜주는 수문장이라고 표현 할 수 있다. 즉, 리포지터리라는 것은 저장방식이 어떻게 되는지를 감춰주기 위한 것이다. 데이터를 어떻게 얻오오고 로드하는 등의 명령을 내리는 상위 레벨의 창구라고 생각하면 된다.
-데이터 소스와 도메인 계층사이에 추상화 계층을 두어서 데이터에 접근하는 방식을 도메인 로직으로부터 분리시킨다. 이로서 데이토소스가 변경된다 하더라고 도메인 계층의 코드를 수정할 필요가 없도록 해준다.
-저장방식을 숨기는 것은 코드상에 다음과 같이 이루어져 있다. 데이터 접근에 대한 로직은 도메인 계층에서 추상화 되어있고 해당 인터페이스를 구체화한 코드는 데이터 레이어 내부에 위치한다.
Data Store Pattern
-실제로 데이터를 담당하는 부분을 의미이며 , 데이터 처리의 구현 방식을 감춰주는 그런 형태이다. 실제로 데이터를 읽고 쓰는 등의 작업을 진행하는 등의 낮은 수준의 작업이 일어나는 부분이다.
-데이터 처리의 구현 방식을 감춰줌으로서 Repository에 영향을 주지 않는다. 예를 들면 로컬DB를 Realm에서 Room으로 변경하여도 Repository 등에 영향을 주지 않은채로 동일한 인터페이스를 통해서 데이터 접근 방식을 제공 할 수 있게 해주고 다른 방식으로 저장이 된다든가 하는일들이 발생한다.
-신뢰 할 수 있는 단 하나의 정보원(Single Source of Truth : SSOT)을 어디에 둘 것이가를 결정해야 한다.
-아래 목록중 한 가지를 선택해서 사용하면 된다.
-"서버로 부터 받는 정보"
-"로컬 DB"
-"캐시"
-"Data Store"(비동기 가능)
-"File"
-서버에서 정보가 내려오면 로컬 DB에 저장을 하고 데이터 계층은 끝이나고 UI 계층에서 로컬DB에서 Flow에서 흐르는 값을 이벤트를 받는 것처럼 할 수 있다.
-거의 대부분 생애주기는 액티비티 또는 Fragment에서 벗어난 것이 좋
-로콜 로딩만 일어난다 : 바로 취소
-원결 로딩만 일어난다 : 응답받고 취소
-저장 작업 , 저장을 향하는 작업 : 계속 진행