컴퓨터

MVVM : iOS의 MVC 개선

작가: Peter Berry
창조 날짜: 13 칠월 2021
업데이트 날짜: 10 할 수있다 2024
Anonim
깨끗한 iOS 아키텍처 pt.5 : MVC, MVVM 및 MVP (UI 디자인 패턴)
동영상: 깨끗한 iOS 아키텍처 pt.5 : MVC, MVVM 및 MVP (UI 디자인 패턴)

콘텐츠

나는 문제에 대한 다른 해결책을 찾는 데 관심이 있습니다. 현재 iOS 애플리케이션을위한 다양한 아키텍처를 탐색 중입니다.

빠른 요약

이전 기사에서 “iOS의 모델보기 컨트롤러” MVC, MVVM 등과 같은 패턴이 필요한 이유를 설명했습니다. 또한 MVC를 탐색하고 MVC가 제공하는 장단점을 살펴 보았습니다.

MVC에서는 뷰를 함께 묶는 컨트롤러를 도입하여 모델에서 뷰를 분리합니다. 이러한 분리는 더 나은 코드 유지 관리 및 테스트 가능성을 제공합니다. 하지만 iOS 버전의 MVC에서는 View와 Controller가 단단히 결합되어 컨트롤러를 테스트하기 위해보기를 모의하기가 어렵다는 제한이 있습니다. View의 복잡성이 증가함에 따라 Controller는 부피가 커지고 테스트하기가 더 어려워집니다.


MVVM (모델보기 ViewModel)이란?

MVVM은 WPF (Windows Presentation Foundation)에서 사용되는 Microsoft의 John Gossman에 의해 처음 소개되었습니다. MVC와 마찬가지로 MVVM은 접착제 View와 Model을 함께 묶는 ViewModel로 알려져 있습니다.

전망 사용자가 상호 작용할 수있는 화면에 표시되는 엔티티입니다. 사용자에게 정보를 표시하고 사용자가 정보를 추가 / 업데이트하거나 사용자 이름 변경 또는 저장 작업 수행과 같은 작업을 수행 할 수 있습니다. 어디로 모델 모든 데이터를 제공하고보기가 수행 할 수있는 작업을 제공합니다. 실제 앱으로 들어가서 접착제.

사용자가 자신의 도시 온도를 볼 수 있고 사용자가 도시 온도도 변경할 수있는 온도 앱을 개발하고 있다고 가정합니다. 앱은 다음과 같습니다.

사용자가 앱을 열면보기에 온도가 표시됩니다.


위의 경우 onViewDidLoad가 트리거되고 glue는 getTemperature 함수를 호출하여 모델에서 정보를 가져옵니다. 이 함수는 온도를 Int 유형으로 반환하므로 Glue는이 값을 표시하기 전에이 값을 형식화해야합니다. 따라서 glue는 도우미 함수 ConvertInDisplayForm을 호출합니다. 이 함수는 온도를 취하고 "Temp> ° C"형식의 문자열을 반환합니다. 그런 다음 glue는 setTempLabelText를 호출하여 서식이 지정된 값을 Label에 설정합니다. 이제 앱이 화면에 "20 ° C"의 온도를 표시합니다.

이제 사용자가 온도를 30 ° C로 업데이트하면 어떻게되는지 살펴 보겠습니다.

이 경우 저장 기능은 View에 의해 트리거되고 Glue는 입력 된 텍스트를 가져와 Int 값으로 변환 한 다음 Model의 setTemperature를 호출합니다. 또한 새 온도의 형식을 지정하고 새 온도로 UI를 업데이트합니다.


Glue의 작업을 나열 해 보겠습니다.

  • 모델에서 데이터를 가져옵니다.
  • 데이터를 "20 ° C"와 같이 볼 수있는 형식으로 변환합니다.
  • 모델에서 각 작업을 수행하기 위해 사용자 작업을 수신합니다.
  • 뷰에서 데이터를 가져와 모델로 전달할 준비를합니다.
  • UI에 표시되는 정보를 업데이트합니다.

이제 Glue가 컨트롤러라고 생각할 것입니다. 예, MVC에서는 그렇습니다. 그래서 MVVM에서 ViewModel은 Glue입니까?

MVVM은 Glue를 두 가지 문제로 나눕니다.

  1. ViewModel
  2. 바인딩

ViewModel View에 필요한 모든 데이터 속성과 UI 상태를 제공합니다. 또한 View가 시작할 수있는 명령 (이벤트 처리기 또는 작업)을 제공합니다. 이므로 바인딩 모델링 변경시 UI에 대한 정보를 업데이트합니다 (또는 그 반대). 또한 ViewModel에서 제공하는 명령으로 Button Tap과 같은 UI 이벤트를 바인딩합니다.

Microsoft Windows Presentation Foundation은 UI 요소를 ViewModel에 바인딩하는 데 사용되는 바인딩 프레임 워크를 제공합니다. iOS에서는 UIViewController 클래스를 사용하여 요소를 ViewModel 클래스에 바인딩 할 수 있습니다.

MVVM의 온도 앱 :

프로토콜 TemperatureViewModelDelegate {func temperatureUpdated (_ vm : TemperatureViewModel)} class TemperatureViewModel {private var _ temperature : Int = 0 public var delegate : TemperatureViewModelDelegate? public var temperature : String {return " (_ temperature) ° C"} public func loadTemperature () {_ temperature = 20 delegate ?. temperatureUpdated (self)} public func changeTemperature (to newTemperature : String) {_ temperature = Int (newTemperature)? ? 0 delegate ?. temperatureUpdated (self)}} class TemperatureViewController : UIViewController, TemperatureViewModelDelegate {@IBOutlet weak var tempLbl : UILabel! @IBOutlet weak var tempTxt : UITextField! var vm = TemperatureViewModel () func viewDidLoad () {super.viewDidLoad () vm.delegate = self vm.loadTemperature ()} func temperatureUpdated (_ vm : TemperatureViewModel) {self.tempLbl.text = vm. temperature} @IBAction func updateTemperature () {vm.changeTemperature (to : tempTxt.text!)}}

보시다시피 컨트롤러는 ViewModel과 데이터를 바인딩하고 ViewModel에 작업 이벤트를 전달합니다. ViewModel은 데이터를로드하고 UI의 상태를 유지하는 모든 로직을 구현합니다.

ViewModel이 MVC의 컨트롤러로 부피가 커질까요? ViewModel을 특정 유형의 뷰를 처리하는 하위 ViewModel로 나눌 수 있습니다. 예를 들어, 홈 화면에는 식품 목록이 표시됩니다. 이 경우 List Food Item 화면을 나타내는 ListFoodItemViewModel을 생성 한 후 HomeViewModel에서 사용할 수 있습니다.

MVVM이 MVC를 개선하는 방법

MVC에서 컨트롤러는 컨트롤러를 부피가 크게 만드는 많은 책임이있는 Glue이며 iOS 컨트롤러는 View와 밀접하게 결합되어 있기 때문에 테스트하기도 어려웠습니다. 그러나 MVVM은 UI 상태 및 모델과의 통신을 ViewModel로 이동하므로 다양한 시나리오에서 UI 상태를 테스트하기가 훨씬 쉽습니다. 그 외에도 ViewModel은 ViewModel의 크기와 복잡성을 줄이는 하위 ViewModel로 나눌 수 있습니다.

MVVM 장단점

  • 보기,보기 상태 및 모델간에 약한 결합을 제공합니다.
  • 보기 상태에 대한 더 큰 테스트 가능성 허용
  • 복잡한 뷰를 더 잘 유지 관리 할 수 ​​있습니다.
  • 바인딩 코드 작성 오버 헤드.
  • 복잡한 간단한 화면을 구현하십시오.
  • 간단한 응용 프로그램의 개발 및 유지 관리 비용이 증가합니다.

결론

MVVM은 복잡한 뷰의 단위 테스트 및 유지 관리를 향상시키는 MVC보다 더 세련된 형태로 책임을 분할하지만 코드 개발 및 유지 관리 비용을 증가시킵니다. 코드에 MVVM 또는 MVC를 사용할 필요가 없습니다. 단일 애플리케이션에서 복합보기에 MVVM을 사용하고 단순보기에 MVC를 사용할 수 있습니다. 이를 통해 불필요한 개발 및 유지 관리 비용을 줄일 수 있습니다.

여기에서 MVVM을 사용한 온도 앱 구현을 찾을 수 있습니다. 질문, 의견 또는 제안이 있으시면 언제든지 의견을 남겨주세요.

관리를 선택하십시오

최근 게시물

Apple iPhone 또는 iPad에서 스크린 샷을 캡처하는 5 가지 방법
전화

Apple iPhone 또는 iPad에서 스크린 샷을 캡처하는 5 가지 방법

저는 Regi tered Tax Return Preparer (RTRP)이자 펜실베니아에있는 3 개의 국가 브랜드 세금 준비 상점에서 10 년 이상 파트너였습니다.iPhone 또는 iPad 화면에있는 내용의 사본을 원하십니까? 이러한 장치를 사용하고 열려있는 앱의 사본을 원하거나 웹 페이지에 사진 사본이있는 것을 좋아하거나 브라우저 페이지의 스크린 샷을 원...
비디오 게임 해설 편집 방법
컴퓨터

비디오 게임 해설 편집 방법

3D 애니메이션에 BFA가 있습니다. 영화 촬영, 편집, 웹 디자인에도 관심이 많습니다.영화와 논평에서 가장 강력한 도구 중 하나는 원하지 않는 부분을 편집하는 기능입니다. 이렇게하면 지루한 부분이 모두 제거되고 가장 중요하고 흥미로운 부분 만 남게됩니다. 이것은 비디오를 향상시키고 청중의 관심을 유지하도록합니다.그러나 비디오에서 어떤 부분을 제거하고 편집...