Skip to content
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

Merged
merged 6 commits into from
Apr 1, 2024

Conversation

HiHoi
Copy link
Collaborator

@HiHoi HiHoi commented Mar 31, 2024

이슈 (번호도 함께 작성해주세요)

해당 사항 (중복 선택)

  • FEAT : 새로운 기능 추가 및 개선
  • FIX : 기존 기능 수정 및 정상 동작을 위한 간단한 추가, 수정사항
  • BUG : 버그 수정
  • REFACTOR : 결과의 변경 없이 코드의 구조를 재조정
  • TEST : 테스트 코드 추가
  • DOCS : 코드가 아닌 문서를 수정한 경우
  • REMOVE : 파일을 삭제하는 작업만 수행
  • RENAME : 파일 또는 폴더명을 수정하거나 위치(경로)를 변경
  • ETC : 이외에 다른 경우 - 어떠한 사항인지 작성해주세요.

반영 브랜치

feat/calendarVM -> dev

변경 사항

  • 캘린더 ViewModel를 나누고 기존의 View와 모델에 연결했습니다.
  • 기능 자체는 동일하게 작동되지만 testflight를 통해 확인하면 좋을 거 같습니다.

나눌 때 중요하게 생각한 점

최대한 SOLID 원칙을 준수하면서 캘린더 VM이 책임을 어디까지 져야 하는지를 고민했습니다.
특히 CalendarView를 관여하는 데이터들만을 담을지 아니면 이 데이터들을 날짜 정보하는 추가적인 VM으로 묶고 다시 내려받아야 할지를 고민했습니다.
고민 끝에 현재 구조에서 캘런더 View에서만 사용하는 변수들이기에 굳이 상위에서 내려 받는 구조를 만들지 않기로 결정했고, 추후 캘린더 기능에서 더 추가될 기능이 없을 거 같다는 판단으로 기존 관여하는 데이터들을 담았습니다.
하지만 이 데이터들이 다른 View에서도 사용된다면 상위 날짜 데이터 로그를 책임질 VM을 만들어서 하위 VM으로 내려주는 것이 좋아보입니다. (기능 추가나 확장성을 고려한다면 더더욱 내려받아야 합니다.
그 결과 캘린더 View에서 관여되는 변수와 변환하는 함수, updateLog로 범위를 좁힐 수 있었고 진행하였습니다.
그리고 기존 View에 종속되는 함수 convert를 VM 안으로 넣고 이후 View 안에서 진행되는 convert를 VM 안에 프로퍼티로 한번 감싸서 가독성과 유지 보수 용이성을 챙겼습니다.

// 기존 코드

TagLogView(logList: calendarVM.convert(calendarVM.calendarModel.monthlyLogs[calendarVM.calendarModel.selectedDate.toString("yyyy.MM.dd")] ?? []))

// 변경된 코드
TagLogView(logList: calendarVM.convertedSelectedMonthlyLog)

  • 캘린더쪽을 테스트하는 코드를 추가했습니다.
  • 가짜 네트워크를 만들어서 값을 리턴하는 방식으로 테스트 구조를 교체했습니다.
  • 값을 잘 불러오는 지를 테스트
  • 값을 잘 변환하는 지를 테스트

  • SwiftLint에서 코드의 라인을 체크하는 부분을 제거했습니다.
  • tab의 크기가 약간 다른 걸 확인했습니다. swiftlint로 규칙을 넣으면 어떨지 고민됩니다.

@HiHoi HiHoi self-assigned this Mar 31, 2024
@HiHoi HiHoi linked an issue Mar 31, 2024 that may be closed by this pull request
4 tasks
@HiHoi HiHoi requested a review from ittzggd March 31, 2024 13:32
Copy link
Collaborator

@ittzggd ittzggd left a 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
Copy link
Collaborator

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 {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CalendarModel은 Model 디렉토리 내에 위치하는게 좋을 것 같습니다!

@ittzggd ittzggd merged commit ad63f1a into dev Apr 1, 2024
3 checks passed
@HiHoi HiHoi deleted the feat/calendarVM branch April 1, 2024 10:10
ittzggd added a commit that referenced this pull request Apr 21, 2024
[Calendar] ViewModel 나누기, 테스트 코드 변경 및 추가에 대한 작업
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Calendar] 캘린더 viewmodel 리팩토링
2 participants