모든 데이터 관련 모듈들이 model, data-local-source, data-remote-source, domain(usecases) 에 각 레이어 단위로 하나의 모듈에 집합해 있었습니다.
이는 관심사가 극히 낮은 컴포넌트끼리 모듈간 의존성을 강제화 하는 문제점을 가지고 있습니다.
따라서 이번 작업은 관심사가 극도로 낮은 모듈간에는 서로간에 의존성을 없애 영역별 관심사 분리를 하고자 하는 것이 목적입니다.
Screenshot
관심사 분리가 어떻게 이루어졌는지 다음과 같은 다이어그램으로 나타낼 수 있습니다.
Before
After
Why
각 관심사가 존재하는 모듈에 대해서만 의존성을 가지기 때문에 불필요한 정보가 관심사가 필요 없는 곳에 노출되지 않아 각 모듈이 독립성을 띌 수 있습니다.
e.g) 세션 화면은 컨트리뷰터나 설정 정보가 전혀 개입되지 않습니다. 따라서 컨트리뷰터와 설정 정보에 대해 의존성을 가질 필요가 없습니다.
만약 컨트리뷰터가 정보가 변경되기 되면 세션화면 모듈도 영향을 받게 되어 빌드를 진행하도록 합니다.
마치며
앞선 #252 를 통해서 구현체 모듈과 추상화 모듈을 분리하여 구현체 모듈이 다른 구현체 모듈에 영향을 미치지 않도록 하였습니다. 이번 PR 을 통해서 각 구현체가 최소한의 의존성을 통해서 독립성을 띌 수 있도록 하였습니다. 이러한 구조는 2개 이상의 서로 다른 성격의 피쳐를 가진 어플리케이션들이 피쳐간 간섭을 최소화 하고 독립성을 유지하면서도 상호간에 추상화 모듈을 통해서 메시지를 주고받을 수 있는 방법으로 많이 사용됩니다. 많은 안드로이드 개발자들이 참고하는 오픈소스인만큼 다중 모듈화에 대한 하나의 참고 자료로 이용되길 바랍니다.
Issue
Overview (Required)
Screenshot
Why
마치며
앞선 #252 를 통해서 구현체 모듈과 추상화 모듈을 분리하여 구현체 모듈이 다른 구현체 모듈에 영향을 미치지 않도록 하였습니다. 이번 PR 을 통해서 각 구현체가 최소한의 의존성을 통해서 독립성을 띌 수 있도록 하였습니다. 이러한 구조는 2개 이상의 서로 다른 성격의 피쳐를 가진 어플리케이션들이 피쳐간 간섭을 최소화 하고 독립성을 유지하면서도 상호간에 추상화 모듈을 통해서 메시지를 주고받을 수 있는 방법으로 많이 사용됩니다. 많은 안드로이드 개발자들이 참고하는 오픈소스인만큼 다중 모듈화에 대한 하나의 참고 자료로 이용되길 바랍니다.
감사합니다.