인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Seung Min Liang님의 프로필 이미지
Seung Min Liang

작성한 질문수

Flutter 고급 - 현업 수준의 아키텍처

20 SearchScreen

domain 에 data_source 를 만드는 이유.

작성

·

29

0

강의 항상 잘 듣고 있습니다.

질문이 하나 생겨서 여쭤봅니다.

20강 30~33분 정도에서 domain 폴더에 data_source 폴더를 만드시는 이유를 다시 설명해주실 수 있을까요?

 

아래는 제가 생각하는 부분입니다.

  1. data/ 의 data/data_source/ 는 data/repository/ 에서 사용하는 부분임.

  2. 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 인터페이스를 참조해야 하기 때문입니다.

 

이 경우에는 추후에 멀티 모듈 방식으로 프로젝트가 확장되게 될 때 각 레이어를 나누기 어려워 지기 때문에 확장성에 제한이 생길 수 있습니다.

Seung Min Liang님의 프로필 이미지
Seung Min Liang

작성한 질문수

질문하기