-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Description
내용
지금까지 구현한 화면들의 ViewModel, Composable들에 대해 코드 리펙토링을 수행합니다.
ViewModel 관련 리펙토링
`@Composable에서 ViewModel을 사용할 경우 Preview를 정상적으로 수행할 수 없는데,
이를 위해서 기존에는 [화면이름]ScreenContainer, [화면이름]Screen으로 분리하였습니다.
하지만 이로 인해서 [화면이름]Screen이 너무 많은 인자를 가지게 되었고 이로 인해 가독성 및 유지보수성이 떨어진다고 판단하였습니다.
이에 ViewModel을 인터페이스로 분리한 후 [화면이름]Screen에 이 인터페이스 구현체를 주입하는 방식으로 수정합니다.
- 기존
@Composable
// 이를 navHost에서 사용하며, 내부에 PokitDetailScreen을 호출
fun PokitDetailScreenContainer(
viewModel: PokitDetailViewModel, // 여기서 PokitDetailViewModel은 interface가 아닌 class
onBackPressed: () -> Unit,
onNavigateToLinkModify: (String) -> Unit,
onNavigateToPokitModify: (String) -> Unit,
onNavigateToAddLink: (String, String) -> Unit,
) { /* 내용 */ }
@Composable
// PokitDetailScreenContainer에서 호출되며, Preview에 사용됨
fun PokitDetailScreen(
onBackPressed: () -> Unit = {},
onClickFilter: () -> Unit = {},
hideFilterChangeBottomSheet: () -> Unit = {},
changeFilter: (Filter) -> Unit = {},
showPokitSelectBottomSheet: () -> Unit = {},
hidePokitSelectBottomSheet: () -> Unit = {},
changePokit: (Pokit) -> Unit = {},
showPokitModifyBottomSheet: () -> Unit = {},
showPokitRemoveBottomSheet: () -> Unit = {},
hidePokitModifyBottomSheet: () -> Unit = {},
showLinkRemoveBottomSheet: () -> Unit = {},
showLinkRemoveBottomSheetWithLink: (Link) -> Unit = {},
hideLinkModifyBottomSheet: () -> Unit = {},
hideLinkDetailBottomSheet: () -> Unit = {},
state: PokitDetailScreenState = PokitDetailScreenState(),
linkList: List<Link> = emptyList(),
linkListState: PagingState = PagingState.IDLE,
pokitList: List<Pokit> = emptyList(),
pokitListState: PagingState = PagingState.IDLE,
showLinkDetailBottomSheet: (Link) -> Unit = {},
onClickPokitModify: (String) -> Unit = {},
onClickPokitRemove: () -> Unit = {},
onClickLinkModify: (String) -> Unit = {},
onClickLinkRemove: () -> Unit = {},
loadNextPokits: () -> Unit = {},
refreshPokits: () -> Unit = {},
loadNextLinks: () -> Unit = {},
onClickBookmark: () -> Unit = {},
onClickAddLink: (String, String) -> Unit = { _, _ -> },
) { /* 내용 */ }- 수정 후
@Composable
// navHost, Preview에 모두 사용됨
fun PokitDetailScreen(
viewModel: PokitDetailViewModel, // 여기서 PokitDetailViewModel은 Interface
onBackPressed: () -> Unit,
onNavigateToLinkModify: (String) -> Unit,
onNavigateToPokitModify: (String) -> Unit,
onNavigateToAddLink: (String, String) -> Unit,
) { /* 내용 */ }BottomSheet 관련 리펙토링 (1/5일 까지 가능하다면)
- 현 포킷 앱에서는 특정 bottomSheet가 여러 화면에서 반복적으로 사용되고 있으며, 이로 인해서 동일한 bottomSheet로직이 여러 ViewModel상에 존재하고 있습니다.
- 또한 기존 화면상의 viewModel 로직과 bottomSheet상의 로직은 서로 영향을 주는 부분이 없다고 판단됩니다.
- 따라서 bottomSheet에 대한 로직을 별도의 ViewModel abstract class로 분리하여 각 화면 ViewModel들에 중복적으로 작성된 로직을 줄이고자 합니다.
Todo
- ViewModel 관련
- 링크 추가/수정 화면
- 포킷 추가/수정 화면
- 알림 목록 화면
- 링크 목록 화면 (좋아요 링크 목록, 안읽음 링크 목록)
- 포킷 내 링크 목록 화면
- 검색 화면
- BottomSheet 관련
- 링크 상세 BottomSheet ViewModel 분리 (링크 삭제확인 포함)
- 포킷 목록 BottomSheet ViewModel 분리
- 포킷 상세 BottomSheet ViewModel 분리 (포킷 삭제확인 포함)
stealmh and jiwon2724
Metadata
Metadata
Assignees
Labels
No labels


