작성
·
31
0
강의 항상 잘 듣고 있습니다.
질문이 하나 생겨서 여쭤봅니다.
20강 30~33분 정도에서 domain 폴더에 data_source 폴더를 만드시는 이유를 다시 설명해주실 수 있을까요?
아래는 제가 생각하는 부분입니다.
data/ 의 data/data_source/ 는 data/repository/ 에서 사용하는 부분임.
domain/ 은 사실상 data/data_source/ 를 직접 접근하지 않고 domain/repository 를 활용하는 domain/use_case 를 통해 접근함.
이렇게 생각이 들다보니, "domain 에서 data_source 의 인터페이스를 정의하는 것이 맞는건가?" 생각이 듭니다.
감사합니다.
답변 1
0
구현체는 data 레이어, 추상화된 인터페이스는 domain 레이어에 두고 있습니다.
domain 레이어가 앱의 핵심 비즈니스 로직을 담당하고 있는데요. domain 레이어에 data_source 의 인터페이스를 두게되면 각 레이어간의 의존관계가 다음과 같아집니다.
presentation --> domain <-- data
의존성의 방향이 외부에서 내부로 향하게 되는 의존성 역전 원칙(DIP)가 적용되고, 핵심은 domain 이게 됩니다.
이 상태에서는 presentation 의 테스트에 domain 레이어만 필요하게 되고
data 레이어의 테스트에도 domain 만 필요하게 됩니다.
만약 data_source 인터페이스가 data 레이어에 있다면 의존 관계는 다음과 같아집니다.
presentation --> domain <--> data
domain 레이어에 있는 Repository 인터페이스가 data 레이어에 있는 data_source 인터페이스를 참조해야 하기 때문입니다.
이 경우에는 추후에 멀티 모듈 방식으로 프로젝트가 확장되게 될 때 각 레이어를 나누기 어려워 지기 때문에 확장성에 제한이 생길 수 있습니다.