- 이 글에서는 Microsoft사의 MVP기술과 TouchGFX 플랫폼이 동작하는 원리에 대하여 기술합니다.
- 당장에 성과가 필요할때 읽기보다는 좀더 기술의 근본적 원리에 대하여 궁금한 분들이 읽으실때 도움이 됩니다.
-
TouchGFX 응용 프로그램에서는 "화면"을 얼마든지 가질 수 있습니다. TouchGFX의 화면은 UI 요소 (위젯)와 관련 비즈니스 논리의 논리적 그룹입니다. 화면은이 화면에 표시되는 모든 위젯을 포함하는 View 클래스와이 화면에 대한 비즈니스 로직을 포함하는 Presenter의 두 클래스로 구성됩니다.
-
단일 화면의 컨텍스트 내에서 전체 응용 프로그램을 구현하도록 선택할 수 있지만 (뷰와 발표자가 하나만 있음을 의미) UI의 관련이없는 부분을 다른 화면으로 분할하는 것이 좋습니다.
- TouchGFX는 가장 많은 RAM을 소비하는 화면에 필요한 RAM을 자동으로 할당하는 메모리 할당 체계를 포함합니다. 이 양만 할당되며이 RAM 블록은 응용 프로그램의 모든 화면에서 재사용됩니다.
- 여러 화면이 있으면 UI 코드를 훨씬 쉽게 관리 할 수 있습니다.
- 응용 프로그램을 화면으로 나누는 방법에 대한 정확한 규칙은 없지만 특정 응용 프로그램을 구성 할 화면을 결정하는 데 도움이되는 특정 지침이 있습니다.
- 시각적 및 기능적으로 관련이없는 UI 영역은 다른 화면에 유지해야합니다. 주 온도 판독 값 디스플레이와 구성 메뉴가있는 매우 간단한 온도 조절기 응용 프로그램을 고려할 경우 온도 판독 값에 대한 "메인 화면"과 구성 메뉴를 표시하기위한 "설정 화면"을 만드는 것이 좋습니다.
- 메인 화면의보기에는 배경 이미지 용 위젯, 온도를 표시하기위한 몇 가지 텍스트 영역 및 구성 메뉴로 전환하기위한 버튼이 있습니다
- 반면에 구성보기에는 구성 옵션 목록과 다른 배경 이미지를 표시하는 위젯이 포함되어있을 수 있습니다.
- 구성 메뉴에서 다양한 유형의 설정 (날짜, 키보드 이름, 온도, 단위 등)을 편집 할 수있는 경우이 화면이 크게 복잡해집니다.
- 이 경우 구성 메뉴를 전체 메뉴 옵션 트리를 표시하는 하나의 화면과 특정 값을 편집하기위한 다른 화면으로 세분화하는 것이 좋습니다.
- 그러나 이것은 프로젝트가 진행됨에 따라 배울 것입니다.
- TouchGFX는 C ++로 구현되므로 화면에서 객체 지향 패러다임을 활용할 수 있습니다.
- 예를 들어 모든 화면의 상단에 현재 시간, 배터리 잔량 등을 표시하는 상태 표시 줄이 표시되어야하는 경우 상태 표시 줄 만 포함 된 기본 보기 클래스를 만들고, 보기 에서 상태 표시 줄 기능이 자동으로 모든 보기를 가져 오도록 할 수 있습니다.
- TouchGFX가 screen(가장 큰 View와 가장 큰 Presenter를 위한 할당)의 메모리를 할당하는 방식 때문에 한 번에 하나의 View와 하나의 Presenter만 활성화 될 수 있습니다.
- 따라서 온도 조절 장치가 온도 값을 표시하는 경우 설정 메뉴 화면은 어디에서도 실행되지 않고 심지어는 할당되지도 않습니다.
- "backend"(온도 조절 장치의 실제 작업을 수행하는 모든 비 UI 코드) 또는 hardware peripherals에서 수신 된 이벤트는 현재 active screen으로 위임될 수 있습니다.
- 일부 이벤트는 특정 screen에만 관계되므로 이에 미치는 영향을 효과적으로 분리 할 수 있습니다.
- 예를 들어, 현재 온도 변화를 알려주는 이벤트가 수신되면 main screen(현재 온도를 나타내는 text area을 업데이트하는)에서만 처리 될 수 있지만, 온도가 표시되지 않는 설정 screen은 이 이벤트와 관계가 없으므로 이벤트를 간단히 폐기 할 수 있습니다.
- Model-View-Presenter(MVP)는 UI 응용 프로그램에서 담당 임무를 나누는 일반적인 방법입니다.
- 그래픽 요소 UI 설정, 변경 사항 대응 및 UI status의 영구적인 유지 문제를 구분합니다.
- 다음은 TouchGFX screen 개념이 전체 Model-View-Presenter 아키텍처와 어떻게 연결되는지를 나타낸 그림입니다.
- UI에 대한 상태 정보를 저장합니다. View와 Presenter는 화면을 전환 할 때 할당이 해제되므로 화면 전환을 거쳐서 유지해야 하는 정보를 저장하는 데 사용할 수 없습니다. 대신 Model을 사용합니다.
- 백엔드 시스템에 대한 인터페이스로 작동하여 현재 활성 screen에서 이벤트를 전달합니다.
- Model 클래스는 현재 활성화 된 presenter에 대해 포인터를 갖도록 자동으로 설정됩니다.
- Model에서 변화가 발생하면 현재 활성화 된 presenter에게 변화가 통보됩니다. 이 작업은 응용 프로그램의 ModelListener 인터페이스에 있는 메소드를 통해 수행됩니다.
- Model 클래스, 백엔드와 현재 screen 사이의 통신 방법에 대한 더 자세한 정보와 예제는 다음 문서를 참조 : Connecting the UI to your system
- 또한 이 screen에 들어가거나 나올 때 자동으로 호출되는 함수 setupScreen와 tearDownScreen함수 가 포함되어 있습니다.
- 일반적으로 setupScreen함수에서 위젯을 구성하게 됩니다.
- View에는 연결된 Presenter에 대한 포인터도 포함됩니다. 이 포인터는 framework에 의해 자동으로 설정됩니다.
- 이 포인터를 사용하여 버튼 클릭과 같은 UI 이벤트를 Presenter에 전달할 수 있습니다.
- Presenter 클래스는 View의 UI 이벤트와 Model의 "백엔드"이벤트를 수신하고 취할 조치를 결정합니다. 예를 들어 Model로부터 알람 이벤트가 수신되면, Presenter는 View에 알람 팝업 대화 상자를 표시해야 한다고 결정할 수 있습니다.
- (역주) 경쟁 플랫폼 QT에서는 시그널-슬롯 통신 및 콜백함수 메커니즘으로 GUI 프레임워크가 동작했다면 MVP 에서는 View 클래스에서 GUI의 보여지는 부분을 담당하고, Presenter가 리소스 최적화, Model에서 프로젝트의 Object를 담당하는것으로 생각됩니다.
- TouchGFX는 한 화면에서 다른 화면으로의 전환을 애니메이션으로 만들 수있는 화면 전환 메커니즘을 가지고 있습니다.
- 기본 전환은 NoTransition으로 한 화면에서 다른 화면으로 즉시 전환하는 것이며, SlideTransition은 가로 또는 세로로 새 화면에서 다른 화면으로 슬라이드합니다.
- 필요한 경우 아주 쉽게 사용자 정의 전환을 만들 수 있습니다.