• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

상태관리되는 변수들의 위치에 대해

22.11.20 13:41 작성 조회수 125

0

상태관리를 viewModel에서 거의 다 하시는 것 같은데 이번 강의에서는 screen 생성자로 Note를 넘겨주셨습니다.

다른 방식으로, notes_screen(목록화면)에서 노트를 클릭했을 때 ui 이벤트를 발생하여 add_edit_note_view_model에 note를 전달하고 그 값(viewModel의 note)을 add_edit_note_screen으로 전달 해서 사용 하는 것은 어떤가요?

생성자로 넘겨주는 것이 훨씬 편하긴 하나 screen에 변수를 선언 안해야 될 것 같은 생각이 들어서 고민에 빠집니다.

 

특정 screen으로 navaigator.push 될때마다 값이 특정 값으로 초기화를 해야되는 상황에서

viewModel에 값을 두고 viewModel을 계속 재성성하는지(강의에서는 노트를 새로 만들 때 배경색을 초기화하는 방법으로 설명),

혹은 viewModel을 하나만 생성하고 screen이 init 될때마다 viewModel의 특정 값을 초기화 해주는지(initState에서 이벤트 발생을 하여),

혹은 add_edit_note_screen의 note 변수처럼 선언해서 값을 초기화 하는지(viewModel 사용 안하는 방식)

강사님의 생각이 궁금합니다.

(첫번째 방식이 가장 간단하긴 하나 계속 생성된다는 것이 마음에 걸려서 2,3번째 방식을 생각하게 됐습니다.)

 

답이 없다는 것은 알고 있지만 어떤 것이 더 좋은 선택이고 좋은 코드가 될 수 있는지 계속 생각하게 되다보니 모호한 질문들을 하게 됐습니다.

 

덕분에 생각을 많이 하게 되고 플러터의 매력에 빠졌습니다.

감사합니다.

답변 1

답변을 작성해보세요.

1

보통 Detail 페이지에 생성자로 객체를 넘겨주는 것을 생각하면 Note도 넘겨주는 것 자체는 문제 없다고 생각합니다.

일단 TextEditingController 가 엮여 있어서 이 부분에 대해서는 저도 더 좋은 방법을 고민중입니다.

ViewModel에 담아서 넘기는 것도 괜찮은 방법입니다.

이 강의의 오류 중 하나가 편의상 모든 ViewModel 이 싱글턴으로 사용됩니다. 대부분의 경우 문제가 없지만
add_edit_note_view_model는 시나리오상 매번 새로 생성되어야 하는 것이 더 자연스럽습니다.

오프라인 수업에서 이 부분에 대해 수정한 코드를 깃헙의 gumsang_master 라는 브랜치에 반영해 두었습니다.

https://github.com/junsuk5/flutter-clean-architecture-course/tree/gumsang_master

화면 이동시 매번 새로운 뷰모델을 주입하도록 수정하였습니다.

image

다음 강의는 의존성 주입에 포커싱을 둔 강의를 계획 중이니 기대해 주세요.

다시 코드를 살펴보았는데요.

ViewModel 에 Note를 전달하는 식으로 수정을 했었네요.

image

궁극적으로 Screen 에서 Note를 받지 않도록 수정이 가능하겠네요. 오프라인 수업에서 이 부분은 학생들이 해 보도록 여지를 남겨두었던 것으로 기억합니다.

이 부분 수정을 해 보시고 더불어 gumsang_master 브랜치에 Pull Request 를 보내 주시는 것은 어떠신가요 ㅎㅎ

참고로 gumsang은 이 문제를 제기한 학생의 아이디입니다.

shhsjk2002님의 프로필

shhsjk2002

질문자

2022.11.20

벌써 답변을 해주셨을 줄 몰랐네요.

viewModel에 데이터를 넘겨줄 생각을 미처 못했네요. 코드 수정한 후 Pull Request를 보내보겠습니다.

좋은 답변과 강의 감사합니다.

다음 강의도 많이 기대하겠습니다.