-
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
[Calendar] ViewModel 나누기, 테스트 코드 변경 및 추가에 대한 작업 #7
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.
고생하셨습니다! 코멘트 남긴 부분은 추후 확인 부탁드립니다:)
@@ -8,7 +8,7 @@ | |||
import SwiftUI | |||
|
|||
struct CalendarBodyView: View { | |||
@EnvironmentObject var hane: Hane | |||
@EnvironmentObject var calendarVM: CalendarVM |
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.
CalendarVM같은 경우는 앱 전체적으로 사용되지 않고 CalendarTab에서만 사용되기때문에 environmentObject로 선언하는 것 보다 stateObject로 CalendarView 내부에서 선언해주는게 좋을 것 같습니다!
|
||
protocol CalendarProtocol {} | ||
|
||
struct CalendarModel { |
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.
CalendarModel은 Model 디렉토리 내에 위치하는게 좋을 것 같습니다!
[Calendar] ViewModel 나누기, 테스트 코드 변경 및 추가에 대한 작업
이슈 (번호도 함께 작성해주세요)
해당 사항 (중복 선택)
반영 브랜치
feat/calendarVM -> dev
변경 사항
나눌 때 중요하게 생각한 점
최대한 SOLID 원칙을 준수하면서 캘린더 VM이 책임을 어디까지 져야 하는지를 고민했습니다.
특히 CalendarView를 관여하는 데이터들만을 담을지 아니면 이 데이터들을 날짜 정보하는 추가적인 VM으로 묶고 다시 내려받아야 할지를 고민했습니다.
고민 끝에 현재 구조에서 캘런더 View에서만 사용하는 변수들이기에 굳이 상위에서 내려 받는 구조를 만들지 않기로 결정했고, 추후 캘린더 기능에서 더 추가될 기능이 없을 거 같다는 판단으로 기존 관여하는 데이터들을 담았습니다.
하지만 이 데이터들이 다른 View에서도 사용된다면 상위 날짜 데이터 로그를 책임질 VM을 만들어서 하위 VM으로 내려주는 것이 좋아보입니다. (기능 추가나 확장성을 고려한다면 더더욱 내려받아야 합니다.
그 결과 캘린더 View에서 관여되는 변수와 변환하는 함수, updateLog로 범위를 좁힐 수 있었고 진행하였습니다.
그리고 기존 View에 종속되는 함수 convert를 VM 안으로 넣고 이후 View 안에서 진행되는 convert를 VM 안에 프로퍼티로 한번 감싸서 가독성과 유지 보수 용이성을 챙겼습니다.