[flutter] provider관리 뷰? 뷰모델?

popolarburr·2023년 10월 18일
0
post-thumbnail

기능을 구현할 때, 어떻게 Provider를 관리할지에 대한 선택은 앱의 아키텍처 및 요구 사항에 따라 다를 수 있습니다. 일반적으로 상태 관리나 데이터 흐름을 조직화하기 위해 뷰모델(ViewModel)을 사용하는 것이 일반적입니다. 이를 통해 UI와 비즈니스 로직을 분리하고 데이터를 관리하거나 전달할 수 있습니다.

뷰모델을 사용하는 경우, getUpdateUserUseCaseImplProvider.notifier를 통해 데이터 업데이트에 관련된 로직을 뷰모델 내에서 처리하고, UI와 뷰모델 간에 데이터를 효율적으로 전달할 수 있습니다. 이로써 뷰와 로직을 분리하고, 코드를 더 쉽게 테스트하고 유지 보수할 수 있습니다.

예를 들어, 로그인 뷰모델에서 다음과 같이 사용자 업데이트를 관리할 수 있습니다:

class LoginViewModel {
  final UpdateUserUseCase updateUserUseCase;

  LoginViewModel(this.updateUserUseCase);

  Future<void> updateUser(UserModel user) async {
    try {
      await updateUserUseCase.updateUser(user);
      // 업데이트 성공 시, UI를 업데이트하거나 다른 작업을 수행할 수 있음
    } catch (e) {
      // 오류 처리
    }
  }
}

그러면 UI에서는 뷰모델을 생성하고 사용할 수 있습니다. UI는 사용자 입력을 수집하고, 이를 뷰모델에 전달하여 로직을 처리합니다.


final loginViewModel = LoginViewModel(getUpdateUserUseCaseImplProvider.notifier);

// ...

ElevatedButton(
  onPressed: () async {
    await loginViewModel.updateUser(user);
  },
  // ...
)

이렇게 하면 비즈니스 로직과 UI가 분리되며, 뷰모델을 통해 데이터를 관리하고 UI를 업데이트할 수 있습니다. 이러한 구조는 앱의 복잡성이 증가할 때 특히 유용하며, 테스트와 유지 보수가 용이합니다.

또한 DIP(Dependency Inversion Principle, 의존성 역전 원칙)을 지킬 수 있다.
View와 ViewModel은 서로 상호작용은 하지만, ViewModel은 전적으로 View의 존재를 모른다. View는 그저 상태관리를 ViewModel을 통해 전적으로 위임하며, ViewModel은 이에 맞게 데이터 관련 상태관리만 하게된다. 이렇게 관리된 상태값을 View에서는 그저 가져다 쓰기 떄문에 ViewModel은 전적으로 View의 존재를 모르게 된다.

이를 통해 상위 레벨에서 하위 레벨에 의존하지 않고, 유지보수성을 챙길 수 있다.

profile
차곡차곡

0개의 댓글