MVVM Pattern

JeHun Lee·2022년 8월 23일
0

The MVVM Pattern

  • View, ViewModel, Model은 분리된 구성요소
    • 대체 가능해야 함
    • 수정 시 다른 요소에 영향을 주지 않아야 함
    • 독립적인 작업이 가능해야 함
    • 격리 Unit test가 가능해야 함
  • Data Binding and Command 구성 요소
    • Binding : 프로그램에 사용된 구성 요소의 실제 값 또는 프로퍼티를 결정짓는 행위
    • ICommand : xaml에서 버튼, 체크박스 등 버튼과 관련된 커멘드의 동작을 이벤트 처리하기 위한 인터 페이스
  • Send Notification 구성 요소
    • INotifyPropertyChanged : 사용자가 속성을 업데이트하면 바인딩된 컨트롤도 업데이트 되어야할 때 이벤트 발생 ( 데이터 객체에 속성 변경 이벤트가 필요 )
    • INotifyCollectionChanged : Collection 내용이 변경되면 알림을 생성하는 이벤트
      ( Collection : 데이터의 검색과 저장을 위해 특화된 것 ex>ArrayList, HashTable, Stack 등 )

View

  • 사용자가 보는 화면( 구조, 레이아웃 및 모양 )을 정의하는 역할
  • View는 비지니스 로직을 포함하지 않고, 제한된 code-behind만 사용하며, 순수 XAML로 정의
    ( code-behind : 컨텐츠 페이지와 프로그래밍 코드를 따로 두겠다는 의미 )
  • 자신만의 ViewModel을 사용하거나, 상위 ViewModel을 상속받아 사용, ViewModel의 변경 알림 이벤트( INotifyPropertyChanged )에 응답해서 뷰를 변경

Model

  • 비즈니스 및 유효성 검사 로직과 함께 데이터 모델을 포함하는 응용프로그램의 도메인 모델
  • Model 대부분 Class로 만들어지며, 내부에 property를 가지고 있음
    ex> Repositories, business object, data transfer objects(DTOs), Plain Old CLR Object(POCOs)
  • INotifyPropertyChanged 이벤트와 TwoWay Binding을 이용해서 View와 양방향 데이터 통신
  • 가능한 비즈니스 로직을 포함하지 않도록 작성

ViewModel

  • View와 Model 사이의 중개자 역할, View의 동작을 상태를 이용해 제어

    • 여러개의 Model을 목록형으로 제공하면, View의 컨트롤이 이를 사용자에게 보여줌
    • View에 Add 버튼을 클릭하면, ICommand를 이용하여 메소드를 실행 하고, 데이터 목록에 Model을 추가
  • INotifyPropertyChanged 이벤트와 TwoWay Binding을 이용해서 View와 양방향 송수신

  • 서비스들을 이용해서 비즈니스 로직을 처리

참고 블로그

0개의 댓글