2018년 2월 6일 화요일

[자마린교육/뷰모델] 자마린 폼즈(Xamarin.Forms) MVVM개요(Model/View/ViewModel)

4.6 MVVM개요(Model/View/ViewModel)
n  Model-View-ViewModel(MVVM) 


Model : 비즈니스 로직과 데이터를 캡슐화 한것이다앱의 데이터를 캡슐화 하는  시각적 클래스 이다따라서 모델은 비즈니스  유효성 확인로직과 함께 데이터 모델을 포함하는 앱의 도메인 모델을 나타내는 것으로모델 개체의 예로는 데이터 전송 개체 (DTO), 일반 올드 CLR 개체 (POCO)  생성  엔터티  프록시 개체가 있다.

모델 클래스는 일반적으로 데이터 액세스  캐싱을 캡슐화하는 서비스 또는 리포지토리와 함께 사용된다.

View : 사용자가 화면에서 보는 구조레이아웃  모양을 정의하는 역할을 한다각각의 뷰는 비즈니스 로직을 포함하지 않는 제한된 코드 숨김으로 XAML 정의되는 것이 이상적이며경우에 따라 코드 숨김 파일에는 애니메이션과 같이 XAML에서 표현하기 어려운 시각적 동작을 구현하는UI 코드가 포함될  있다. Xamarin.Forms 응용 프로그램에서 뷰는 일반적으로 Page 또는 ContentView 자식클래스로 뷰는 객체가 표시   이를시각적으로 나타내는  사용할 UI 요소를 지정하는 데이터 템플릿으로 표현할 수도 있다뷰로 사용되는 데이터 템플릿에는 코드 숨김이 없으며 특정  모델 유형에 바인딩 되도록 설계되었다.

코드 숨김에서 활성화  비활성화하지 않고  모델 속성에 바인딩하여 UI 요소를 사용하거나 사용하지 않도록 설정하는 것이 바람직하다.

뷰의 상호 작용 ( : 버튼 클릭 또는 항목 선택) 대한 응답으로  모델에서 코드를 실행하기위한  가지 옵션이 있다컨트롤이 명령(Command) 지원하면 컨트롤의 Command 속성을  모델의 ICommand 속성에 데이터 바인딩   있다컨트롤의 명령이 호출되면  모델의 코드가 실행되는 것이다명령 외에도 동작을 뷰의 개체에 연결할  있으며 호출  명령이나 발생시킬 이벤트를 수신   있다이에 대한 응답으로 동작은  모델에서 ICommand 호출하거나  모델에서 메서드를 호출   있다.

ViewModel : View 나타내주기 위한 Model이며  프리젠테이션 로직과 뷰를 위한 데이터를 캡슐화하고 있다 모델은 뷰가 데이터를 바인딩  수있는 속성  명령을 구현하고 변경 알림 이벤트를 통해 변경 사항을 뷰에 알린다.

 모델에서 제공하는 속성  명령은 UI에서 제공하는 기능을 정의하지만 뷰는 해당 기능을 표시하는 방법을 결정한다.뷰와 뷰가 요구하는 모델 클래스들 간의 상호작용을 조직할 책임이 있으며 뷰가 표시하는 데이터와 Command 구현한 것이다View보다는 Model 유사하게 디자인 되며, View 바인딩   가장 강력하다

 모델에서는 I / O 작업에 비동기 메서드를 사용하고 속성 변경사항을 뷰에 비동기 적으로 알리려면 이벤트를 발생시킨다 모델은 뷰의 상호 작용에 필요한 모든 모델 클래스와 조화시키는 역할을 하며 일반적으로  모델과 모델 클래스 사이에는 일대  관계이다 모델은 뷰의 컨트롤이 뷰에 직접 바인딩   있도록 모델 클래스를 뷰에 직접 표시하도록 선택할  있으며  경우 모델 클래스는 데이터 바인딩을 지원하고 알림 이벤트를 변경하도록 설계되어야 한다.

  모델(ViewModel) 뷰에서 쉽게 사용할  있는 양식으로 모델의 데이터를 제공하며 이를 수행하기 위해 때때로 데이터 변환을 수행하는데  데이터 변환을  모델에 배치하는 것은 뷰가 바인딩  수있는 속성을 제공하기 때문에 좋은 방법이다예를 들어  모델은  속성의 값을 결합하여 뷰로 표시하기 쉽게 만들  있다.

데이터에  모델에서 제공하지 않는 특수한 형식이 필요할 때가 있는데  모델이 뷰와의 양방향 데이터 바인딩에 참여하려면 해당 속성이 PropertyChanged 이벤트를 발생시켜야 한다 모델은 INotifyPropertyChanged 인터페이스를 구현하고 속성이 변경   PropertyChanged 이벤트를 발생시키면 된다.

컬렉션의 경우 ObservableCollection<T> 제공되며  경우 컬렉션 변경(삽입 또는 삭제) 알리기 위해 INotifyChangedChanged 인터페이스를 구현하지 않아도 된다.

n  뷰는 뷰 모델을 "인식"하고 뷰 모델은 모델을 잘지만 모델은 뷰 모델을 인식하지 못하고 뷰 모델은 뷰를 인식하지 못한다따라서 뷰 모델은 뷰를 모델에서 분리하고 모델이 뷰와 독립적으로 전개되도록 한다.
n  뷰 모델은 모델 클래스의 어댑터 역할을 하므로 뷰의 변경에 따라 모델 코드를 크게 변경하지 않아도 된다.
n  뷰가 XAML로 완전히 구현 된 경우 코드를 건드리지 않고 앱 UI를 다시 디자인 할 수 있다.

n  Model-View-ViewModel(MVVM) 패턴에 기반하여 XAML을 탄생 시켰으며 기본 패턴은 View와 Model 이다(즉 ViewModel). XAML은 사용자 인터페이스와 (*.xaml) 기본데이터(Model)와의 연결은 코드 비하인드 C#(*.cs)으로 가능하도록 완벽한 분리를 해놓았다. View와 ViewModel은 XAML XML파일의 Data Binding 정의를 통해 연결될 수도 있으며 View에 대한 BindingContext는 일반적으로 ViewModel의 인스턴스 이다.

댓글 없음:

댓글 쓰기