-
Notifications
You must be signed in to change notification settings - Fork 72
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[개선] feature 모듈별 컴포넌트 분리 #327
The head ref may contain hidden characters: "feature/#308-\uBAA8\uB4C8\uBCC4_\uCEF4\uD3EC\uB10C\uD2B8_\uBD84\uB9AC"
[개선] feature 모듈별 컴포넌트 분리 #327
Conversation
Test Results19 tests 19 ✅ 5s ⏱️ Results for commit d8ad348. ♻️ This comment has been updated with latest results. |
) | ||
} | ||
} | ||
|
||
@Composable | ||
private fun BookmarkTopAppBar( | ||
private fun LazyListScope.bookmarkItems( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 함수를 분리할 이유가있나요?
어차피 이 부분을 테스트 하려면 LazyColumn이 필요하고, BookmarkItemUiState를 필요하기에 재사용이 불가능합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사실 이 부분은 반드시 분리할 필요는 없는 코드입니다.
다만 SessionScreen.kt 파일의 LazyListScope.sessionItems()
함수를 레퍼런스 삼아 코드 통일성을 유지하려고 하다 보니 분리했었습니다.
함수로 분리하지 않도록 수정해놓겠습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이전에 커멘트 드렸듯이. 개인적인 생각으론 의미 없는 분리가 너무 많은것 같습니다.
함수의 분리는 단순히 함수를 분리하는것이 아닌 재사용이 가능한가를 함께 판단하여 분리합니다.
함수의 길이를 줄이자가 아니라 함수를 분리했을때 올 수 있는 장점이 있는가를 보는것이죠.
이 코드는 TagChip은 적절한 분리입니다. 2번 이상 사용하고있으니깐요. 하지만 forEach를 별도로하기 위한 분리는 큰 의미가 없어보입니다.
SectionChips를 어차피 구성하기 위한 함수일 뿐이니깐요.
@Composable
internal fun SessionChips(session: Session) {
Row(
horizontalArrangement = Arrangement.spacedBy(8.dp),
verticalAlignment = Alignment.CenterVertically,
) {
TrackChip(room = session.room)
TimeChip(dateTime = session.startTime)
TagChips(tags = session.tags.toPersistentList())
}
}
@Composable
internal fun TagChips(tags: PersistentList<Tag>) {
tags.forEach { tag ->
TagChip(tag = tag)
}
}
@Composable
internal fun TagChip(tag: Tag) {
TextChip(
text = tag.name,
containerColor = DarkGray,
labelColor = LightGray,
)
}
유사한 형태가 몇몇 더 보여서 일단 리뷰 진행은 더하지 않았습니다. 다시 고민 부탁드려요.
@taehwandev 리뷰 남겨주셔서 감사합니다. 다만, 제가 작업하면서 느낀 함수 분리의 목적은 다음과 같습니다.
1번은 태환님의 의견과 동일하지만 2, 3번이 추가되었다고 할 수 있습니다. 이전 코드를 살펴보면 단순 Text, Image를 감싼 코드지만 이미 분리되어 있는 경우가 많습니다. 그리고 작업을 하다보니 이전 코드와의 컨벤션을 지키기 위해 분리한 목적도 있습니다. 단순 재사용을 위해서만 함수를 분리해야 한다면 기존에 Text or Image로만 분리되어 있던 코드들도 함수로 감싸지 않은 형태로 변경해야 할까요? 글이 조금 길어졌습니다,, |
@tmdgh1592 저도 적고나서 기존 코드가 유사한 형태일것 같았는데요. 컴포즈를 한 3년째 사용하고있는 상황인데, 단순 Text/Image와 같은 내부 컴포넌트 구성은 효율적입니다. 아마 기존 코드에서도 보실 수 있었겠지만 기존 코드도 과도한 분리로 보여지는 부분들이 있습니다. 이걸 Diff로 한다한들 이전과 현재는 항상 동일할겁니다. 개인적인 분리는 아래와 같습니다.
Text/Image를 하나하나 분리했을때의 장점이 없다는 부분이 이 부분입니다. 어차피 Text 컴포넌트는 style을 적용해서 공통화 시켜둔 상태이구요. 그래서 말씀하신 부분의 2, 3번 케이스도 충분히 이해가가지 만 분리했을때의 장점을 찾진 못했습니다. 제가 나눈다면
이정도일것 같습니다. 어차피 저 리스트를 꾸며주기 위한 Component일 뿐이니 저걸 벗어나지도 않습니다. 분리한다고 했을때 저 함수를 통해서 아 이건 그냥 이 리스트를 만들기 위한 컴포넌트이구나를 파악하는것이죠. 그 안에있는 내용을 다 분리할 필요는 없는것이구요. 분리를 했다면 적절한 Preview도 필요합니다. 근데 프리뷰 상태도 저 리스트에 대한 프리뷰이지 각각의 Text()를 다시 Preview 하지 않을것 같습니다. 그걸 한다한들 장점은 없구요. 어차피 List에 포함되어진결과물이 중요한것일 뿐이구요. |
@taehwandev 답변 감사합니다! 예를 들어, 또는, SponsorCard의 텍스트 스켈레톤에 대한 코드가 중복인 것으로 확인했고, 이를 분리하여 재사용하고자 감사합니다 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다.
Issue
Overview (Required)
이전 PR을 분리하고자 새롭게 PR요청드립니다.
리뷰에 남겨주신 것처럼 하나의 PR에 작업량이 많아지다보니,
기존에 있던 Preview를 이동시킨 것 외에는 추가로 Preview를 구현하지 않았습니다.
해당 PR이 merge가 가능해지면 그 이후에 분리된 컴포넌트에 대해서 Preview를 작성하겠습니다.
컴포넌트 파일 분리는 디자인 수정을 기준으로 삼았습니다. (특정 컴포넌트의 디자인이 변경되었을 때 해당 파일만 수정하면 되도록)
컴포넌트 함수 분리는 하위 컴포넌트간의 연관성을 기준으로 나누었습니다.
제가 놓쳤거나 더 나은 개선 방안이 있다면 수정하겠습니다.
감사합니다.
TO-DO