-
Notifications
You must be signed in to change notification settings - Fork 2
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
[REFACTOR] Barrel Pattern 적용 #446
Conversation
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.
리팩토링 감사합니다 포메~!~ 몇가지 코멘트 남겼어요!!!
해당 PR을 통해 import문은 많이 짧아질 것 같아서 좋네요 근데 코멘트에도 남겼지만 파일을 찾아가기 어려워졌고, import문을 줄이기 위해 디렉토리가 많이 생겨 복잡할 수도 있겠다는 생각이 드네용
너무 추상화되어 있어서 이해하기 어려워질 수 있다는 것과 비슷한 맥락인 것 같아요 한번 확인해주시면 감사하겠습니다:)
SillyDdangkongMedium, | ||
SillyDdangkongSmall, | ||
SpinDdangkong, | ||
}; |
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.
🌸 칭찬 🌸
오 이렇게 export 하면 import할 때 편할 것 같네용
frontend/src/components/index.ts
Outdated
ReadySkeleton, | ||
Spinner, | ||
Toast, | ||
}; |
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.
🙏 제안 🙏
이렇게 하나로 묶어서 export하면 import문은 한줄로 표현할 수 있어서 복잡도를 줄일 수 있지만, 파일을 수정할 때 그 파일을 찾아가기가 어려워졌다는 단점이 있을 것 같아요! 계층 구조를 파악하기도 어렵고, 일부 파일을 보면 index에서 안가져오고 export한 파일에서 가져오기도 하구요
대안이 있다면 common과 layout, 그리고 나머지로 따로 export하는 방식은 어떤가요?? components에 여러 곳에서 사용되는 것만 남겨두긴 했지만 common, layout과 나머지는 성격이 다르다고 생각이 듭니다!
스읍 vscode에서 써봐야 알 것 같긴 한데 import한 파일을 찾아갈 때 depth가 복잡하면 개인적으로 생산성이 많이 떨어질 거라고 생각이 들어요 그래서 이런 구조가 조심스럽긴 합니다! 포메는 어떻게 생각하시나용
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.
음, 무슨 얘기인지 알 것 같아요. 우선 common, layout를 준비해서 정리해보았습니다!
그 import한 파일을 찾을 때는 VSC 기준으로 ctrl + 마우스 왼클릭
을 하면 곧바로 해당 파일로 찾아가지 괜찮지 않을까합니다.
RoomSettingHeader, | ||
RoundResultHeader, | ||
MatchingResultHeader, | ||
} from './components'; |
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.
🌸 칭찬 🌸
헤더 분리 굿굿 각각의 헤더에서 필요한 import문만 남았네용
useRoundVoteResultQuery, | ||
useThrottle, | ||
useToast, | ||
}; |
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.
🌸 칭찬 🌸
공통 훅은 확실히 이런 방식이 이쁘네요
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.
🌸 칭찬 🌸
그러네요 진짜 공통 훅 싹 정리되니 편-안
import useSelectOption from './hooks/useSelectOption'; | ||
import { selectContainerLayout, selectSection } from './SelectContainer.styled'; | ||
import SelectOption from './SelectOption/SelectOption'; | ||
import Timer from './Timer/Timer'; | ||
import SelectButton from '../SelectButton/SelectButton'; |
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.
🙏 제안 🙏
components안에 components를 둔 이유가 있나요?
PR에서만 봐서 그런지 모르겠는데 너무 헷갈릴 것 같아요 처음에 페이지 안에 components 폴더를 둔 이유는 페이지에서 사용되는 컴포넌트를 확인하기 쉽게 하자였고, A컴포넌트 안에서만 사용되는 하위 컴포넌트는 A 디렉토리에 넣기로 했었습니다!
근데 컴포넌트 안에 하위 컴포넌트가 있다고 모두 components 폴더로 묶는다면 �depth가 너무 깊어질 것 같고, 오히려 가독성을 헤치는 것 같다는 느낌이 들어요,,,
그래서 components 폴더는 *-page 바로 하위에만 있었으면 좋겠는데 어떻게 생각하시나용
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.
계층이 계속 많아지는 부분은 사실 저도 우려하긴했었습니다. components 폴더 안에 components 폴더가 또 있는게 이상하긴하더라고요.
저렇게 둔 이유는 hooks 라는 이름의 폴더가 이미 있어서 hooks와 component가 같은 depth에 있는게 맞는가에 대해 의문이 들어 components 폴더를 추가로 만들었습니다.
우선, components 폴더는 하나만 두고 컴포넌트 안에 곧바로 내부 컴포넌트 폴더가 있는 방식으로 변경하였습니다!
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.
아하아하 아니면 hooks도 컴포넌트마다 두지 말고 페이지별로 hooks를 두는 방법도 있을 것 같아요!
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.
그러면 페이지 별로 hooks폴더는 하나이고 하위 컴포넌트에서 hook이 여러 개인 경우 hooks 폴더 없이 각 hook을 파일로 놔두는 방식인가요 ??!
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.
포메 ! 이렇게 수정해서 import 를 줄일 수 있게 되어 좋은 것 같아요 ! ! ! 불 필요한 파일 및 폴더명 수정과 같이 놓치기 쉬운 부분도 정리해주어 감사합니다 ^ .^
@@ -1,6 +1,6 @@ | |||
import { css } from '@emotion/react'; | |||
|
|||
export const a11yOnlyLayout = css` | |||
export const A11yOnlyLayout = css` |
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.
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.
replaceAll을 하면서 A11yOnly가 다 바뀐 것 같네요 ㅎㅎ....
style 코드들은 소문자로 시작하는게 맞으므로 원래대로 되돌리겠습니다!
interface HeaderProps { | ||
title: string; | ||
} | ||
import { TitleHeader, RoomSettingHeader, RoundResultHeader, MatchingResultHeader } from '.'; |
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.
🌸 칭찬 🌸
헤더 분리해서 이렇게 사용하니 좋네요 !!
useRoundVoteResultQuery, | ||
useThrottle, | ||
useToast, | ||
}; |
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.
🌸 칭찬 🌸
그러네요 진짜 공통 훅 싹 정리되니 편-안
@@ -13,7 +13,7 @@ import { formatLeftRoundTime, isAlertTimer } from './Timer.util'; | |||
import useVoteIsFinished from '../hooks/useVoteIsFinished'; | |||
|
|||
import DdangkongTimer from '@/assets/images/ddangkongTimer.webp'; | |||
import A11yOnly from '@/components/common/a11yOnly/A11yOnly'; | |||
import A11yOnly from '@/components/common/A11yOnly/A11yOnly'; |
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 Number
#439
As-Is
파일들이 많아지면서 최상단에 import 문들이 많아지고 있어
Barrel Pattern
을 적용해 코드를 읽기 좋게 변경한다.Barrel Parttern이란?
여러 곳에서 export 되고 있는 모듈들을 한 파일에 모아서 한 번에 export하는 방식의 패턴
To-Be
여러 곳에서 export 되고 있는 모듈들을 한 파일에 모아서 한 번에 export하는 방식의 패턴
png
->webp
로 바꾸면서 사용하지 않게 된png
이미지들 삭제기존에는
hooks
폴더와 각 컴포넌트가 같은 depth에 있어 어색한 폴더구조라 생각되어 다른 폴더에서와 일관성을 지키기 위해 똑같이hooks
,components
폴더로 변경Check List
Test Screenshot
Before
After
여러 줄에서 import 해 오던 컴포넌트를 한 줄에서 불러올 수 있게 되었다.
(Optional) Additional Description
기능이 변경되거나 추가된 부분은 없고 리팩토링만 되었습니다. 파일 체인지 자체는 많긴한데 로직이 추가되거나 한 부분은 없습니다.
🌸 Storybook 배포 주소