Кампутары

MVVM: удасканаленне MVC у iOS

Аўтар: Peter Berry
Дата Стварэння: 13 Ліпень 2021
Дата Абнаўлення: 10 Травень 2024
Anonim
MVVM: удасканаленне MVC у iOS - Кампутары
MVVM: удасканаленне MVC у iOS - Кампутары

Задаволены

Я вельмі зацікаўлены ў пошуку розных шляхоў вырашэння праблемы. У цяперашні час вывучаюцца розныя архітэктуры прыкладанняў iOS.

Хуткі рэзюмэ

У папярэднім артыкуле «Кантролер прагляду мадэлі ў iOS» Я растлумачыў, навошта нам патрэбныя такія шаблоны, як MVC, MVVM і г. д. Я таксама вывучыў MVC і разгледзеў плюсы і мінусы, з якімі пастаўляецца MVC.

У MVC мы аддзяляем свой выгляд ад мадэлі, прадстаўляючы кантролер, які звязвае іх паміж сабой. Гэта падзел забяспечвае лепшае абслугоўванне і праверку кода. Але ў версіі MVC для iOS ёсць абмежаванне, што View і Controller цесна звязаны, таму складана здзекавацца з выгляду для тэставання Controller. Па меры павелічэння складанасці прагляду, кантролер становіцца грувасткім і становіцца цяжэй праверыць.


Што такое MVVM (View ViewModel мадэлі)?

MVVM, першапачаткова ўведзены Джонам Госсманам ад Microsoft, які выкарыстоўваўся ў Фондзе прэзентацыі Windows (WPF). Як і MVC, MVVM таксама забяспечвае Клей вядомы як ViewModel, які звязвае выгляд і мадэль.

Выгляд з'яўляецца бачным аб'ектам на экране, з якім карыстальнік можа ўзаемадзейнічаць. Ён адлюстроўвае інфармацыю для карыстальніка і дазваляе карыстальніку дадаваць / абнаўляць інфармацыю альбо выконваць любыя дзеянні, такія як змяненне імя карыстальніка альбо выкананне захавання. Дзе як Мадэль забяспечвае ўсе дадзеныя і забяспечвае аперацыі, якія View можа выконваць. Давайце акунемся ў рэальнае прыкладанне, каб убачыць працу Клей.

Уявіце, што вы распрацоўваеце дадатак "Тэмпература", які дазваляе карыстальнікам бачыць тэмпературу свайго горада, а таксама можа мяняць тэмпературу горада. Прыкладанне будзе выглядаць прыблізна так:

Калі карыстальнік адкрывае прыкладанне, вось што адбываецца, каб паказаць тэмпературу ў выглядзе:


У прыведзеным вышэй выпадку onViewDidLoad спрацоўвае, клей атрымае інфармацыю з мадэлі, выклікаючы функцыю getTemperature. Гэтая функцыя верне тэмпературу ў тыпе Int, таму клей павінен адфарматаваць гэта значэнне, перш чым мы зможам яго адлюстраваць. Такім чынам, клей назаве сваю дапаможную функцыю ConvertInDisplayForm. Гэтая функцыя вымярае тэмпературу і вяртае радок у фармаце "Тэмп> ° C". Затым клей усталюе адфарматаванае значэнне ў Label, выклікаючы setTempLabelText. Цяпер наша дадатак будзе паказваць на экране тэмпературу "20 ° C".

Зараз паглядзім, што будзе, калі карыстальнік абнавіць тэмпературу да 30 ° C:

У гэтым выпадку функцыя захавання запускаецца View, клей атрымлівае ўведзены тэкст, пераўтворыць яго ў значэнне Int, а затым выклікае setTemperature of Model. Ён таксама фарматуе новую тэмпературу і абнаўляе карыстацкі інтэрфейс з новай тэмпературай.


Давайце пералічым задачы клею:

  • Ён атрымлівае дадзеныя з мадэлі.
  • Ён пераўтварае дадзеныя ў праглядную форму, напрыклад, "20 ° C".
  • Ён праслухоўвае дзеянне карыстальніка для выканання адпаведнай аперацыі ў Model.
  • Ён атрымлівае дадзеныя з выгляду і рыхтуе іх для перадачы ў мадэль.
  • Ён абнаўляе інфармацыю, паказаную на карыстацкім інтэрфейсе.

Цяпер вы будзеце думаць: клей - гэта кантролер? Так, у MVC гэта так. Такім чынам, у MVVM ViewModel - гэта клей?

MVVM падзяляе клей на два пытанні:

  1. ViewModel
  2. Пераплёты

ViewModel забяспечвае ўсе ўласцівасці дадзеных, якія патрабуе View, і стан карыстацкага інтэрфейсу. Ён таксама забяспечвае каманды (апрацоўшчыкі падзей або аперацыі), якія View можа ініцыяваць. Тады як Пераплёты будзе абнаўляць інфармацыю пра карыстацкі інтэрфейс пры мадэляванні змен (ці наадварот). Ён таксама звязвае падзеі карыстацкага інтэрфейсу, такія як Button Tap, з камандамі, прадстаўленымі ViewModel.

Microsoft Windows Presentation Foundation забяспечвае Binding framework, які выкарыстоўваецца для прывязкі элементаў карыстацкага інтэрфейсу да 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 дэлегата? .TemperatureUpdated (self)}} клас TemperatureViewController: UIViewController, TemperatureViewModelDelegate {@IBOutlet слабы var tempLbl: UILabel! @IBOutlet слабы var tempTxt: UITextField! var vm = TemperaturaViewModel () func viewDidLoad () {super.viewDidLoad () vm.delegate = self vm.loadTemperature ()} func temperatureUpdated (_ vm: TemperatureViewModel) {self.tempLbl.text = vm.temperature update} TIBemction func. () {vm.changeTemperature (да: tempTxt.text!)}}

Як бачыце, кантролер толькі прывязвае дадзеныя да і з ViewModel і перадае аперацыйныя падзеі ViewModel. ViewModel рэалізуе ўсю логіку загрузкі дадзеных і падтрымання стану карыстацкага інтэрфейсу.

Ці стане ViewModel грувасткім у якасці кантролера ў MVC? Мы можам падзяліць ViewModel на дапаможныя ViewModels, якія апрацоўваюць пэўныя тыпы праглядаў. Напрыклад, на галоўным экране адлюстроўваецца спіс прадуктаў харчавання. У гэтай сітуацыі вы можаце стварыць ListFoodItemViewModel, які прадстаўляе экран "Элемент спіса прадуктаў", а затым выкарыстоўваць яго ў HomeViewModel.

Як MVVM паляпшае MVC

У MVC кантролер - гэта клей, які мае мноства абавязкаў (як абмяркоўвалася вышэй), што робіць кантролер грувасткім, а паколькі кантролер iOS цесна спалучаецца з View, яго таксама было цяжка праверыць. Але MVVM перамяшчае стан карыстацкага інтэрфейсу і сувязь з мадэллю ў ViewModel, вельмі лёгка праверыць стан карыстацкага інтэрфейсу ў розных сцэнарыях. У дадатак да гэтага ViewModels можа ўварвацца ў дапаможныя ViewModels, што памяншае памер і складанасць ViewModel.

Плюсы і мінусы MVVM

  • Забяспечце слабую сувязь паміж выглядам, станам прагляду і мадэллю.
  • Дазваляе большую праверка стану гледжання
  • Дазваляе лепш падтрымліваць складаны выгляд.
  • Накладныя выдаткі на напісанне кода прывязкі.
  • Зрабіце рэалізацыю простага экрана, складанага.
  • Павелічэнне выдаткаў на распрацоўку і абслугоўванне простага прыкладання.

Выснова

MVVM разбівае абавязкі на больш вытанчаную форму, чым MVC, што паляпшае модульнае тэсціраванне і абслугоўванне складанага выгляду, але павялічвае выдаткі на распрацоўку і абслугоўванне кода. Не абавязкова выкарыстоўваць у кодзе ні MVVM, ні MVC. Вы можаце змешваць і супастаўляць іх і выкарыстоўваць MVVM для складаных відаў і MVC для простых відаў у адным дадатку. Гэта можа дапамагчы вам скараціць непатрэбныя выдаткі на распрацоўку і тэхнічнае абслугоўванне.

Вы можаце знайсці рэалізацыю прыкладання тэмпературы з выкарыстаннем MVVM тут. Калі ў вас ёсць якія-небудзь пытанні, заўвагі ці прапановы, не саромейцеся пакінуць каментарый.

Выбар Адміністрацыі

Мы Раім

Як наладзіць і калібраваць акустычныя сістэмы аб'ёмнага гуку (5.1, 6.1, 7.1)
Кампутары

Як наладзіць і калібраваць акустычныя сістэмы аб'ёмнага гуку (5.1, 6.1, 7.1)

Я быў аматарам хатняга кінатэатра на працягу многіх гадоў і заўсёды шукаю наступнае абнаўленне альбо самаробны праект.Налада і каліброўка хатняй сістэмы аб'ёмнага гучання можа быць няпростай задач...
Агляд навяснога камутатара Meross Smart Wi-Fi (працуе з Amazon Alexa і Google Assistant)
Кампутары

Агляд навяснога камутатара Meross Smart Wi-Fi (працуе з Amazon Alexa і Google Assistant)

Кшыштаф - на ўсё жыццё будучы наркаманам, які займаецца даследаваннем апошніх гісторый такіх кампаній, як Apple, am ung, Google і Amazon.Пераключальнік святла Wi-Fi Mero mart (23,99 долараў) - гэта не...