Pan fydd llywio yn golygu mwy na gwthio
Async Digital Ltd Caerdydd, DU
Yn aml, nid sgriniau yw cyrchfannau mwyaf defnyddiol ap. Ymholiad chwilio, hidlydd rhestr, sgrôl sy’n aros, avatar wedi’i ehangu: cyflwr y mae golwg yn ei ddarllen yw pob un, nid golwg i’w gwthio. Mae Deep Link Kit yn ffactorio’r cyflwr hwnnw yn set gaeedig o achosion effaith y mae’r defnyddiwr yn eu datgan, ac yn eu cymhwyso trwy un switsh, mewn trefn, rhwng camau llywio strwythurol. Y wobr yw wyneb mewnbwn rhaglenadwy. Mae tap, URL, prawf, a chipio sgrin sgriptiedig i gyd yn gyrru’r ap trwy’r un llwybr cod, ac mae pob ysgrifeniad yn glanio mewn trywydd wedi’i stampio â’r cyflwr a gynhyrchodd. Mae’r erthygl hon yn cerdded trwy set lawn yr ap demo o achosion, yn dilyn y pedwar pwynt mynediad at yr un switsh y maent yn ei rannu, ac yn enwi’r hyn y mae’r dyluniad yn talu amdano.
Chwilio, hidlwyr, sgrolio sy’n aros, troshaenau ehangu. Nid sgrin i’w gwthio yw’r un ohonynt, ac mae pob un yn lle y dylai URL allu mynd â chi iddo. Ateb y pecyn yw set gaeedig o achosion ysgrifenadwy ac un switsh sy’n eu cymhwyso, pwy bynnag sy’n gofyn.
Y cyflwr na all llwybrydd sgriniau ei gyrraedd
Mae dwy erthygl gynharach yn gosod y sylfaen i hon. Fe wnaeth un gyfrif y darlleniadau: golygon yn ymgynghori â chyflwr cydlynydd a rennir, ddegau o weithiau, gan drin hynny fel cost onest cyflwr dros dro y mae sawl sgrin yn poeni amdano. Dangosodd y llall sut mae URLau yn cyrraedd y cyflwr hwnnw heb ollwng cyd-destun i ramadeg yr URL. Mae’r darn hwn yn enwi beth yw’r cyflwr mewn gwirionedd, o ochr yr ap: set gaeedig o achosion ysgrifenadwy.
Y cwestiwn sy’n ei ysgogi: pan fydd “llywio” yn golygu mwy na gwthio a chyflwyno, lle mae’r gweddill yn byw? Chwiliad sgyrsiau. Hidlydd rhestr. Sgrôl sy’n gorfod aros i’w rhestr fodoli. Troshaen ehangu avatar. Atodiad wedi’i agor yn llawn sgrin. Nid sgrin i’w gwthio yw’r un ohonynt. Cyflwr y mae golwg yn ei ddarllen yw pob un.
Mae’r rhan fwyaf o haenau llywio yn stopio wrth ffin y sgrin ac yn gadael y cyflwr hwnnw i osodwyr ad-hoc ar wasgar trwy’r ap. Mae Deep Link Kit yn cymryd y safbwynt arall. Dilyniant o gamau yw cynllun llywio, ac mae cam naill ai’n strwythurol (gwthio, popio, cyflwyno, cau) neu’n effaith: un achos o enum y mae’r defnyddiwr yn ei ddatgan, wedi’i gymhwyso trwy un dull y mae’r defnyddiwr yn ei drosysgrifo. Nid yw’r pecyn yn gwybod beth mae effaith yn ei olygu. Mae’n gwarantu pryd mae effeithiau’n rhedeg, ym mha drefn, a beth sy’n digwydd pan fydd URL mwy newydd yn torri ar eu traws.
Set gaeedig o achosion ysgrifenadwy
Hanner y defnyddiwr o’r cytundeb yw’r enum hwnnw. Mae’r pecyn yn galw’r fraich yn Step.effect, ac mae pob llif yn rhwymo ei fath effaith ei hun iddi, fel y gall cynllun gydblethu camau strwythurol a chamau effaith mewn un rhestr drefnedig. Mae pob achos yn enwi un darn ysgrifenadwy o gyflwr dros dro, a’r switsh cymhwyso yw’r un lle y mae’r ysgrifeniadau hynny’n digwydd. Yn yr ap negeseuon demo y mae’r gyfres hon yn mesur ei honiadau yn ei erbyn, y set lawn yw deg achos yn ysgrifennu saith priodwedd arsylladwy.
| Achos effaith | Yn ysgrifennu |
|---|---|
applyInThreadSearch(query:) | activeSearchQuery |
clearInThreadSearch | activeSearchQuery = nil |
clearListFilter | activeListFilter = nil |
scrollToAvatarRow(_:) | pendingAvatarScroll |
scrollToConversationRow(_:) | pendingConversationScroll |
expandAvatar(_:) | expandedAvatar (yn datrys bot i’w sgwrs un-i-un) |
collapseAvatar | expandedAvatar = nil |
expandImageAttachment(_:) | pendingAttachmentExpansion |
dismissAttachmentExpansion | pendingAttachmentExpansion = nil |
selectConversationsBot(_:) | selectedTab ac activeListFilter mewn un pas |
Mae siâp y set mor ddadlennol â’i maint. Mae parau cymesur yn rhannu priodwedd: mae’r pâr chwilio yn ysgrifennu un, y pâr avatar yn ysgrifennu un, a’r pâr atodiadau yn ysgrifennu un. Mae un achos cyfansawdd, selectConversationsBot(_:), yn ysgrifennu dwy briodwedd mewn un pas fel nad yw’r rhyngwyneb byth yn dangos y cyflwr hanner ffordd. Mae golygon yn darllen y priodweddau hyn yn uniongyrchol. Mae profion ac awtomeiddio yn eu darllen trwy giplun: math gwerth sy’n pecynnu cyflwr arsylladwy’r cydlynydd, wedi’i stampio ar bob digwyddiad effaith y mae’r trywydd yn ei recordio.
Yn fwriadol, nid yw’r pecyn yn berchen ar yr un o’r enwau hyn. Gadewais yr achosion i’r defnyddiwr oherwydd mai dim ond y defnyddiwr sy’n gwybod beth yw ei gyflwr dros dro; yr hyn y mae’r pecyn yn berchen arno yw’r gwarant bod y set yn aros yn gaeedig. Os yw darn o gyflwr yn werth ei yrru o URL, mae’n ennill achos, un fraich switsh, a dim byd arall.
Pedwar pwynt mynediad, un gweithrediad
Yr hyn sy’n gwneud y set yn wyneb rheoli yn hytrach na thabl llwybro yw pwy sy’n cael ei defnyddio. Mae pedwar galwr yn cydgyfeirio ar yr un switsh.
- Tapiau. Nid yw trinydd tap yr eicon chwilio yn ysgrifennu
activeSearchQueryei hun. Mae’n adeiladu URL ac yn ei agor, fel bod yr un penderfyniad ymwybodol o gyflwr yn berthnasol ag ar gyfer dolen yn cyrraedd o’r tu allan. Paredd trwy adeiladwaith, nid trwy adolygu cod. - URLau. Mae’r llwybr agor yn dosrannu URL sy’n cyrraedd yn erbyn ciplun wedi’i rewi o’r cyflwr presennol, yn adeiladu cynllun, ac yn ei redeg. Dyma’r llwybr y mae popeth arall yn ei fenthyg.
- Profion. Mae gyrrwr y profion yn tanio URLau at y llwybr agor ac yn gwirio yn erbyn y trywydd a recordiwyd. Mae’n darllen yr un priodweddau arsylladwy â’r golygon, trwy’r un math ciplun.
- Cipio sgriptiedig. Mae
simctl openurlyn gyrru’r llwybr agor o gragen. Felly y llwyfannwyd y recordiadau yn y gyfres hon: sgript yn tanio URLau at yr ap sy’n rhedeg nes bod y sgrin yn dangos y cyflwr sy’n werth ei gipio.
Nid gweithrediadau cyfochrog o’r un ysgrifeniad yw’r pedwar pwynt mynediad; un gweithrediad ydynt, wedi’i gyrraedd mewn pedair ffordd.
URL na welodd y defnyddiwr mohono yw tap. URL gyda gwiriadau yw prawf. URL gyda chamera’n rhedeg yw sesiwn gipio. Tynnwch unrhyw un ohonynt ac nid yw’r switsh yn gwybod nac yn poeni.
Un bwriad, un rhestr drefnedig
Mae effeithiau’n ennill eu lle pan fyddant yn cyfansoddi gyda llywio strwythurol. Pan fydd URL fel botmessages://profile/aria-7 yn gofyn am avatar wedi’i ehangu, mae’r llif yn dychwelyd un rhestr drefnedig:
case .avatarExpanded(let id):
return [
.effect(.dismissAttachmentExpansion),
.effect(.clearInThreadSearch),
.effect(.clearListFilter),
.nav(.popToRoot),
.nav(.dismissSheet),
.effect(.scrollToAvatarRow(id)),
.effect(.expandAvatar(id))
]
Pum cam effaith a dau gam llywio ar gyfer un bwriad. Clirio beth bynnag allai fod yn gorchuddio’r sgrin, cerdded y pentwr yn ôl i’r gwraidd, yna sgrolio ac ehangu. Mae’r pecyn yn rhedeg y rhestr mewn trefn ac yn gwirio am ganslo rhwng camau; dim ond un achos ar y tro y mae switsh y defnyddiwr byth yn ei weld.
Mae’r trosysgrifiad o amgylch y switsh yn gwneud tri pheth cyn unrhyw ysgrifeniad:
- Gwirio a yw URL mwy newydd eisoes wedi goddiweddyd y rhediad hwn, ac os felly recordio’r achos yn y trywydd gyda’r ôl-ddodiad
[cancelled]yn lle ei gymhwyso. - Gofyn a yw’r achos yn ddi-newid yn erbyn y cyflwr presennol. Mae’r cliriadau idempotent (cau’r avatar, clirio’r chwilio, clirio’r hidlydd, cau’r atodiad) yn hepgor yr ysgrifeniad ac yn recordio digwyddiad
[skipped]. - Gohirio’r cofnod trywydd ei hun, fel bod hyd yn oed yr achosion a warchodir wrth redeg yn glanio yn y trywydd gyda’r ôl-ddodiad cywir.
Y tu mewn i’r switsh, un aseiniad i briodwedd arsylladwy yw pob ysgrifeniad. Mae’r haen olygon yn ymateb, mae’r trywydd yn stampio ciplun ôl-gyflwr, ac mae’r cam nesaf yn rhedeg. Y trywydd yw’r rhan y mae profion ac asiantau yn pwyso arni: nid “cafodd yr URL ei drin”, ond “digwyddodd yr ysgrifeniadau hyn, yn y drefn hon, a dyma’r cyflwr a adawodd pob un ar ei ôl”.
Yr hyn y mae’r dyluniad yn talu amdano
Nid yw dim o hyn am ddim. Mae pedair cost yn werth eu henwi, oherwydd mae pob un yn ffinio pa mor bell y gellir ymddiried yn y trywydd a sut mae’r wyneb yn ymddwyn ar ei ymylon.
Mae achosion cyfansawdd yn cuddio trefn fewnol. Mae selectConversationsBot(_:) yn ysgrifennu’r tab a’r hidlydd mewn un pas fel nad yw’r defnyddiwr byth yn gweld tab heb ei hidlo yn y canol. Y gost yw manylder: mae’r trywydd yn dangos un digwyddiad, nid dau. Mae diagnosio atchweliad lle newidiodd y tab ond na newidiodd yr hidlydd yn golygu darllen y cod, nid y trywydd.
Mae canfod achosion di-newid wedi’i restru â llaw. Rhestrir y pedwar cliriad idempotent â llaw, pob un gyda rhagfynegiad sy’n enwi’r briodwedd y mae’n ei gwirio. Ni all y pecyn gasglu o’r achos ei hun a yw’n ddi-newid. Mae angen cofnod newydd ar effaith glirio newydd, neu bydd y trywydd yn recordio ysgrifeniadau ffug.
Mae gwarchodwyr amser rhedeg yn hepgor yn hytrach na chwalu. Mae dau achos yn chwilio yn nata enghreifftiol y demo am yr ID a roddir iddynt, ac mae ID anhysbys yn marcio’r cam fel un a hepgorwyd yn hytrach na stopio’r rhediad. Mae’r wyneb yn aros ar agor i fewnbwn annilys; mae’r defnyddiwr yn amsugno’r methiant wrth gymhwyso. Mae dosrannu’n aros yn bur; cymhwyso sy’n cario’r gwarchodwyr.
Mae recordio’r trywydd yn ddiamod. Mae pob cymhwysiad yn recordio digwyddiad gyda chiplun ffres, ac mae’r rhestr ddigwyddiadau yn tyfu nes i’r defnyddiwr ei hailosod. Mewn cynhyrchu mae hynny wedi’i ffinio gan gylch bywyd y trywydd; mewn sesiynau hir, gwaith y defnyddiwr yw’r ailosod.
Paredd fel ffaith strwythurol
Pan fydd mynediad tap a mynediad URL yn rhannu switsh cymhwyso, mae “gallwch yrru’r ap trwy URL” yn peidio â bod yn honiad ac yn dod yn briodwedd o’r bensaernïaeth. Mae prawf yn tanio URL oherwydd URLau yw’r iaith fewnbwn. Mae recordiad demo yn tanio URL am yr un rheswm. Mae asiant sy’n gosod yr ap ar gyfer sgrinlun yn tanio URL oherwydd nad oes dim byd arall i’w danio. Dim llwybr arbennig i brofion, dim bachyn ar wahân i’r recordio, dim API cyfochrog i awtomeiddio lithro’n hen.
Mae’r un wyneb yn ateb cwestiwn anoddach: faint all un URL ei roi i’r defnyddiwr, yn barod i barhau yn hytrach na dechrau eto? Achos effaith fel unrhyw un arall yw paratoi drafft, ac mae cyflwr cyfansoddi wedi’i baratoi, yng nghanol ei olygu, ddwy haen o ddalennau i lawr, yn troi allan i fod yn werth un URL o waith. Mae darn olaf y gyfres yn dangos hynny o’r dechrau i’r diwedd. Mae’r map llawn yn byw ar yr hwb dolennu dwfn.