Conas an Ailtireacht chuí iOS a roghnú (Cuid 2)

MVC, MVP, MVVM, VIPER nó VIP

Is féidir leat dul i gcomhairle le cuid a haon anseo.

Na hailtireachtaí iOS is tábhachtaí

Forbhreathnú gairid.

MVC

Is iad seo a leanas na sraitheanna MVC:

M: loighic ghnó, ciseal líonra agus ciseal rochtana sonraí

V: Leibhéal Chomhéadain (rudaí UIKit, cláir scéal, Xibs)

C: Comhordaíonn sé an idirghabháil idir samhail agus amharc.

Chun MVC a thuiscint caithfimid an comhthéacs inar cumadh é a thuiscint. Ceapadh MVC sna seanlaethanta forbartha gréasáin nuair nach raibh aon stádas ag Views. Sna seanlaethanta, déanann an brabhsálaí an HTML go léir a athlódáil gach uair a theastaíonn athrú amhairc uainn ar an suíomh Gréasáin. Ag an am, ní raibh aon smaoineamh ann go raibh an stát amharc á bhuanú agus á shábháil.

Mar shampla, bhí roinnt forbróirí ann a d’úsáid na comhaid HTML céanna, PHP agus rochtain ar bhunachar sonraí. Mar sin ba é príomhspreagadh MVC an leibhéal radhairc a scaradh ó leibhéal na samhla. Mhéadaigh sé seo inseachadacht leibhéal an mhúnla. Líomhnaítear i MVC níor cheart go mbeadh eolas ag na sraitheanna radhairc agus samhlacha faoina chéile. Chun é seo a dhéanamh indéanta, cumadh ciseal idirmheánach ar a dtugtar rialtóir. Ba é seo an SRP a cuireadh i bhfeidhm.

Sampla den timthriall MVC:

  1. Spreagtar gníomh úsáideora / teagmhas úsáideora ar an leibhéal radhairc (e.g. “gníomh nuashonraithe”) agus cuirtear an gníomh seo in iúl don rialaitheoir
  2. An rialaitheoir a sheolann sonraí go leibhéal na samhla
  3. Déan na sonraí a chuirtear ar ais a shamhaltú don rialaitheoir
  4. Deir an rialaitheoir go ndéanfaidh an dearcadh a stádas a nuashonrú leis na sonraí nua
  5. Féach ar a staid a nuashonrú

Apple MVC

In iOS, tá an Rialaitheoir Amharc in éineacht leis an UIKit agus an radharc saolré, mar sin ní MVC íon é. Mar sin féin, sa sainmhíniú MVC níl aon rud le rá nach féidir leis an rialaitheoir an dearcadh nó an cur chun feidhme samhail-shonrach a bheith ar eolas aige. Is é a phríomhchuspóir freagrachtaí leibhéal an mhúnla a scaradh ón leibhéal radhairc ionas gur féidir linn iad a athúsáid agus leibhéal na samhla a thástáil ina n-aonar.

Tá an radharc ag an ViewController agus is leis an tsamhail. Is í an fhadhb atá ann go bhfuil an cód rialaitheora agus an cód amharc á scríobh againn chuig an ViewController.

Is minic gurb é MVC is cúis le fadhb an Rialaitheora Massive View, ach ní tharlaíonn sé ach in aipeanna a bhfuil castacht leordhóthanach acu agus a éiríonn gnó tromchúiseach.

Tá cúpla modh ann ar féidir leis an bhforbróir a úsáid chun an Rialaitheoir Amharc a dhéanamh níos soiléire. Roinnt samplaí:

  • Sliocht an loighic VC d’aicmí eile mar fhoinse sonraí na modhanna amharc tábla agus tarmligean do chomhaid eile agus patrún dearaidh na dtoscairí á úsáid.
  • Cruthaigh miondealú níos soiléire ar na freagrachtaí comhdhéanaimh (e.g. an VC a roinnt ina rialuithe ar amharc leanaí).
  • Úsáid patrún dearaidh an chomhordaitheora chun an fhreagracht as loighic na loingseoireachta a chur i bhfeidhm sa rialtóir fíorúil
  • Úsáid rang fillteán DataPresenter a chuimsíonn an loighic agus a athraíonn an tsamhail sonraí ina aschur sonraí a léiríonn na sonraí a chuirtear i láthair an úsáideora deiridh.

MVC i gcoinne MVP

Mar a fheiceann tú léaráid MVP, tá MVC an-chosúil

Ba chéim chun tosaigh é an MVC, ach bhí sé fós marcáilte ag neamhláithreacht nó ciúnas faoi roinnt rudaí.

Idir an dá linn, d’fhás an Gréasán Domhanda agus d’fhorbair go leor rudaí i measc an phobail fhorbróirí. Mar shampla, thosaigh na ríomhchláraitheoirí ag úsáid Ajax agus gan ach codanna de leathanaigh a luchtú in ionad an leathanaigh HTML ar fad ag an am céanna.

I MVC, is é mo thuairim nach bhfuil aon chomhartha ann nár cheart go mbeadh a fhios ag an rialaitheoir cur chun feidhme sonrach View (neamhláithreacht).

Bhí HTML mar chuid den chiseal amharc, agus bhí a lán cásanna chomh dúr. I roinnt cásanna, ní fhaigheann sé ach imeachtaí ón úsáideoir agus taispeánann sé ábhar amhairc an GUI.

De réir mar a luchtaíodh codanna de na leathanaigh ghréasáin ina gcodanna, caomhnaíodh an stát amharc mar thoradh ar an deighilt seo agus bhí gá níos mó le scaradh na bhfreagrachtaí as loighic an chur i láthair.

Is í loighic an chur i láthair an loighic a rialaíonn an chaoi ar chóir an comhéadan úsáideora a thaispeáint agus an chaoi a n-idirghníomhaíonn eilimintí comhéadan úsáideora lena chéile. Sampla is ea an loighic rialaithe maidir le cathain ba chóir do tháscaire luchtaithe tosú ag taispeáint / beochan agus cathain ba chóir dó stopadh ag taispeáint / beochan.

I MVP agus MVVM, ba cheart go mbeadh an ciseal radhairc chomh goofy nach bhfuil aon loighic ná faisnéis ann, agus in iOS ba cheart go mbeadh an rialtóir radhairc mar chuid den chiseal radhairc. De bharr go bhfuil View balbh, fanann fiú loighic an chur i láthair lasmuigh den eitleán View.

Ceann de na fadhbanna le MVC ná nach bhfuil sé soiléir cá háit ar chóir loighic an chur i láthair a dhéanamh. Níl sé ach ciúin faoi. Ar chóir go mbeadh loighic an chur i láthair ag leibhéal an radhairc nó ag leibhéal an mhúnla?

Más é ról an mhúnla ach na “sonraí amha” a sholáthar, ciallaíonn sé gurb é seo a leanas an cód atá san amharc:

Smaoinigh ar an sampla seo a leanas: Tá úsáideoir againn a bhfuil an chéad ainm agus an t-ainm deireanach air. Is é an dearcadh go gcaithfimid an t-ainm úsáideora a thaispeáint mar "Last Name, First Name" (e.g. "Flores, Tiago").

Más é ról an mhúnla na sonraí “amh” a sholáthar, ciallaíonn sé gurb é seo a leanas an cód atá san amharc:

lig firstName = userModel.getFirstName () lig lastName = userModel.getLastName () nameLabel.text = Ainm Deireanach + “,“ + Céadainm

Ciallaíonn sé seo go bhfuil sé de fhreagracht ar View loighic an chomhéadain úsáideora a láimhseáil. Mar sin féin, déanann sé seo dodhéanta loighic an chomhéadain úsáideora a thástáil.

Is é an cur chuige eile ná ligean don mhúnla na sonraí a chaithfear a thaispeáint a thaispeáint agus an loighic ghnó a cheilt ón radharc. Ach ansin tá samhlacha againn a dhéileálann le loighic an ghnó agus le loighic an chomhéadain úsáideora. Aonán intomhaiste a bheadh ​​ann, ach ansin tá an tsamhail ag brath go hintuigthe.

lig ainm = userModel.getDisplayName () nameLabel.text = ainm

Tá sé seo soiléir don MVP agus fanann loighic an chur i láthair ag leibhéal an láithreora. Méadaíonn sé seo inseachadacht leibhéal an láithreora. Anois is féidir an tsamhail agus an ciseal láithreora a thástáil gan aon fhadhbanna.

De ghnáth i gcur chun feidhme MVP bíonn an radharc i bhfolach taobh thiar de chomhéadan / phrótacal agus níor cheart go mbeadh aon tagairtí don UIKit san láithreoir.

Rud eile atá le tabhairt faoi deara ná na spleáchais aistrithe.

Má tá ciseal gnó ag an rialtóir mar spleáchas agus má tá ciseal rochtana sonraí ag an gciseal gnó mar spleáchas, tá spleáchas aistritheach ag an rialtóir ar an gciseal rochtana ar shonraí. Ós rud é go n-úsáideann cur chun feidhme MVP conradh (prótacal) de ghnáth idir gach leibhéal, níl aon spleáchais aistrithe ann.

Athraíonn na sraitheanna éagsúla freisin ar chúiseanna éagsúla agus ar rátaí difriúla. Mar sin má athraíonn tú leibhéal amháin, ní cheaptar go mbeidh éifeachtaí / fadhbanna tánaisteacha sna leibhéil eile ina chúis leis seo.

Tá prótacail níos cobhsaí ná ranganna. Níl aon sonraí cur chun feidhme sna logaí agus níl siad nasctha leis na conarthaí. Dá réir sin, is féidir sonraí cur chun feidhme leibhéal amháin a athrú gan dul i bhfeidhm ar na leibhéil eile.

Cruthaíonn na conarthaí (prótacail) díchúpláil idir na sraitheanna.

MVP vs MVVM

Léaráid MVVM

Ceann de na príomhdhifríochtaí idir MVP agus MVVM is ea go gcomhéadaíonn an láithreoir leis an radharc i MVP, agus i MVVM tá an radharc dírithe ar athruithe sonraí agus teagmhais.

Sa MVP cruthaímid nasc láimhe idir an láithreoir agus amharc ag úsáid comhéadain / prótacal. Sa MVVM déanaimid ceangal uathoibríoch sonraí le RxSwift, KVO nó meicníocht le cineálacha agus dúnadh.

Sa MVVM ní theastaíonn conradh uainn fiú (e.g. comhéadan Java / prótacal iOS) idir ViewModel agus View, mar a dhéanaimid cumarsáid de ghnáth tríd an bPatrún Dearaidh Breathnóra.

Úsáideann an MVP patrún na dtoscairí toisc go dtarchuireann an ciseal láithreora orduithe chuig an gciseal amharc. Dá bhrí sin, ní mór dó rud éigin a bheith ar eolas aige faoin dearcadh, fiú mura bhfuil ann ach síniú an chomhéadain / an phrótacail. Smaoinigh ar an difríocht idir toscairí Ionad Fógra agus TableView. Níl aon chomhéadain de dhíth ar an Ionad Fógra chun cainéal cumarsáide a chruthú. Mar sin féin, úsáideann Toscairí TableView prótacal ar cheart do na ranganna a chur i bhfeidhm.

Smaoinigh ar loighic cur i láthair táscaire muirir. I MVP, ritheann an láithreoir ViewProtocol.showLoadingIndicator. I MVVM, d’fhéadfadh go mbeadh maoin isLoading sa ViewModel. Úsáideann an ciseal amharc ceangailteach uathoibríoch sonraí chun a aithint nuair a athraíonn agus a nuashonraíonn an mhaoin seo. Tá MVP níos láidre ná MVVM toisc go n-eisíonn an láithreoir orduithe.

Baineann MVVM níos mó le hathruithe sonraí ná orduithe díreacha, agus nascann muid athruithe sonraí chun nuashonruithe a fheiceáil. Nuair a úsáidimid RxSwift agus paraidím ríomhchláraithe imoibríoch feidhmiúil in éineacht le MVVM, rinneamar an cód níos lú láidre agus níos dearbhaithí fós.

Tá sé níos éasca MVVM a thástáil ná MVP, toisc go n-úsáideann MVVM an Patrún Dearaidh Breathnóra, a aistríonn sonraí idir comhpháirteanna ar bhealach díchúpláilte. Mar sin is féidir linn tástáil a dhéanamh trí bhreathnú díreach ar na hathruithe sna sonraí tríd an dá réad a chur i gcomparáid lena chéile, seachas magadh a dhéanamh ar na glaonna modhanna chun an chumarsáid idir an radharc agus an láithreoir a thástáil.

PS: Rinne mé cúpla nuashonrú ar an mír a thug air fás go leor. Ba ghá mar sin é a roinnt ina thrí chuid. Is féidir leat an tríú cuid a léamh anseo.

Críochnaíonn Cuid a Dó anseo. Tá fáilte roimh aiseolas ar fad. Baineann cuid a trí le VIPER, VIP, Clárú Imoibríoch, Trád-Off, Srianta agus Sense Comhthéacsúil.

Go raibh maith agat as léamh! Má bhain tú taitneamh as an alt seo, bualadh bos please le do thoil ionas gur féidir le daoine eile é a léamh freisin :)