MVVM 패턴은 VIEW VIEWMODEL MODEL로 구분이 되어있는 디자인 패턴입니다.
1.View
view는 ui에 관한 로직을 포함합니다. 즉 사용자가 화면에서 보는 것들에 관한 로직만을 담는것을 원칙으로 합니다.
wpf에서는 initializecomponent메서드를 호출하는 생성자만 호출하는 것이 이상적으로는 바람직합니다.
단 코드비하인드에는 xaml에서 표현하기 어렵거나 view모델에서 바인딩하는것을 구현하기 어렵거나 비효율적인 ui에 관한 로직을 포함 합니다.
view는 datacontext를 통해 view model을 참조합니다.
2.View model
뷰모델은 프리젠 테이션 로직을 포함 합니다.
view에 대한 직접적인 참조를 가지고 있으면 안됩니다.
view가 바인드 할수 있는 프라퍼티와 커맨드를 구현합니다. 그리고 상태변경에 관한 event를 통해서 view에 변경된 데이터를 넘겨줍니다.
Inotifychanged, InotifyCollectonChanged와 같은 인터페이스의 상속을 통해 데이터의 변경된 값을 넘겨주거나
ICommand와 같은 인터페이스르 사용하여 명령에 대한 이벤트를 처리해야 합니다.
뷰와 무델 클래스는 1대 다 관계가 존재하며
뷰모델에서는 여러 모델을 참조하여 부가적인 기능을 만들 수 있습니다.
ex) IDataErrorInfo 를 사용한 데이터 검증 예외처리 로직, 두 모델에서의 값을 결합
3.Model
원하는 데이터를 얻기위해 데이터 처리를 수행하는 로직을 포함 합니다.
뷰와 뷰모델에 대한 직접적인 참조를 하지 않습니다.
데이터에 대한 접근에 관한 로직이나 캐싱을 지원하는 코드를 포함 할 수있습니다.
ex)ado.net entity framework
데이터에 대한 변경 이벤트와 컬렉션 변경에 대한 전달 이벤트를 제공합니다.
mvvm의 장단점
장점
1. 각 부분간의 의존성이 없기 때무에 확장에 용이 합니다.
2. 각 부분이 독립적이여서 모듈화 하기 쉽습니다.
단점
1. view model에서 간단한 부분에서는 배보다 배꼽이 더 큰 경우가 생깁니다.
2.데이터 바인딩 인터페이스 등의 사용법을 정확히 이해 해야 사용이 용이 합니다.
'c#' 카테고리의 다른 글
wpf MVVM ICommand 버튼 비활성화 활성화 (0) | 2023.01.26 |
---|---|
C# 오류 'System.Windows.ResourceDictionary' 형식의 개체를 만들 수 없습니다. 원인 분석 (0) | 2023.01.18 |
C# 데이터베이스 연결 하는 법 SqlDataReader SqlDataAdapter 차이점 (0) | 2022.12.29 |
c# dataGridview combobox 추가 하는 법 combobox ComboBox_SelectedIndexChanged 이벤트 추가 (0) | 2022.12.27 |
c#기초 Extension 확장 메서드 Extension Method (0) | 2022.12.22 |