MVVM패턴은 소프트웨어 아키텍처 디자인 패턴 중 하나로 주로 UI개발에 적용되는 패턴

데이터와 비즈니스 로직을 관리
class Model {
int _count = 0;
int get count => _count;
void increment(){
_count++;
}
}
사용자의 입력을 처리하고, 사용자에게 정보를 표기
class View extends StatelessWidget { // 상태(State)를 직접 가지지 않는 컴포넌트
const View({super.key});
@override
Widget build(BuildContext context){
final Model model = Model();
final ViewModel viewModel = ViewModel(model);
return Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () => viewModel.increment(),
child: ValueListenableBuilder<int>(
valueListenable: viewModel.count,
builder: (context, count, child){
return Text('$count');
}
)
),
);
}
}
View 와 Model 사이의 중재자 역할로 View 에 표기될 데이터와 명령을 노출하고, 뷰의 액션을 모델로 전달
class ViewModel {
final Model _model;
ViewModel(this._model);
final ValueNotifier<int> count = ValueNotifier<int>(0);
void increment(){
_model.increment();
count.value = _model.count;
}
void dispose(){
count.dispose();
}
}
데이터 바인딩
데이터 바인딩을 통해 모델의 변경이 자동으로 뷰에 반영되므로 개발자가 명시적으로 업데이트 코드를 작성할 필요가 없다.
코드 분리
비즈니스 로직과 UI로직이 분리되어 각각의 역할에 집중할 수 있으며, 코드의 가독성과 유지보수성이 향상된다.