droidknights / DroidKnightsApp

국내 최대 규모 안드로이드 컨퍼런스 드로이드나이츠 앱
https://www.droidknights.dev
255 stars 69 forks source link

(ENG)[#252] feature 모듈 내 main 과 다른 모듈에 대해 수평 구조화 #261

Closed SeongUgJung closed 12 months ago

SeongUgJung commented 1 year ago

Issue

Overview (Required)

기존 코드들이 함수위주로 적용되어 main 모듈에서 하위 구현체 모듈에 대해 강한 커플링이 구성되어 있어 nav-graph 기능과 에러 처리등에서 이를 분리하기가 매우 난해하여 이를 해결하고자 LocalCompositionProvider 를 이용하였으나 이는 임시방편에 가까운 형태입니다.

MainActivity 에서는 각 모듈내의 DroidKnightsNavGraph DroidKnightsNavController DroidKnightsTab 의 구현체를 추상화 객체를 통해서 주입받고 이를 동작하도록 하였습니다.

의존성 변경사항

v1 v2
before after

차이점

순서 기존 신규
P0 App App
P1 main main,home, setting, contributor, session, bookmark, core-impl
P2 home, setting, contributor, session, bookmark, core-impl core-apis, feature-apis ,main-nav-graph ,design, ui, navigation
P3 core-apis, design, ui, navigation -
SeongUgJung commented 1 year ago

좀 더 naive 한 접근방법이 생각나서 다시 작업해서 올리겠습니다.

laco-dev commented 1 year ago

기존 코드들이 함수위주로 적용되어 main 모듈에서 하위 구현체 모듈에 대해 강한 커플링이 구성되어 있어 nav-graph 기능과 에러 처리등에서 이를 분리하기가 매우 난해하여 이를 해결하고자 LocalCompositionProvider 를 이용하였으나 이는 임시방편에 가까운 형태입니다.

이 점이 Feature 베이스를 사용하는 레퍼런스에서 가장 어려운 고민 주제가 되는 것 같습니다. 대부분 단순한 형태의 네비게이션 형태이지만 사실 현업과 같은 환경에서는 복잡한 라우팅이 요구되는데 하나의 모듈에서 모든 라우팅을 담당하는부분에 어려움이 있었습니다. 작성해주신 내용처럼 이러한 문제를 해결하기 위한 뚜렷한 Practice가 아직은 참고할만한 자료가 많이 부족한 상태이기 때문에, 의견주신 내용이 개발자들의 고민 욕구를 한층 푸는데 도움이 될 것으로 보입니다. 👍🏻

SeongUgJung commented 1 year ago

좀 더 간단하고 직관적인 형태로 변경하였습니다.

MainNavigator 에서 사용할 DroidKnightsNavController, NavGraph 빌드를 위한 DroidKnightsNavGraph, 탭 정보 관리를 위한 DroidKnightsTab 을 추가 하고 이를 주입받아 기존의 코드를 대체하는 형태로 해서 변경을 최소화 하도록 하였습니다.

SeongUgJung commented 1 year ago

리뷰해주시는대로 https://github.com/droidknights/DroidKnights2023_App/issues/262 작업 진행하도록 하겠습니다.

laco-dev commented 12 months ago

@SeongUgJung https://github.com/droidknights/DroidKnights2023_App/pull/261#discussion_r1320545777 이 내용 놓치신 것 같아서 맨션 드립니다.

확인되면 병합하도록 하겠습니다. 🙏🏻