Payments
Kif Niddisinja Sistema ta' Pagamenti bħala Junior .NET Developer
Jekk ningħata feature ta' pagament għada, il-partijiet diffiċli ma jkunux id-disinn tal-API. Ikunu l-idempotency, il-fatt li l-problemi tal-flus ma jidhrux fit-testing, u li naf x'ma nibnix.
Jekk xi ħadd jagħtini feature ta' pagament għada, id-disinn tal-API tkun il-parti faċli. Dak li verament ninkwieta dwaru huwa lista aqsar u inqas ovvja milli kont nissupponi sena ilu.
Ma nibnix il-parti tal-pagament
L-ewwel deċiżjoni hija x'ma nibnix. Id-dejta tal-cards għandha obbligi ta' compliance marbuta magħha, u junior developer li jiddeċiedi jittratta numri sħaħ ta' cards biex jiffranka miżata ta' integrazzjoni qed jieħu deċiżjoni li mhix tiegħu biex jieħu. Uża provider, ħalli d-dettalji tal-card jgħaddu lilhom, u aħżen ir-referenza li jagħtuk lura.
Dan jinstema' bħallikieku tevita l-problema. Fil-fatt hija t-tweġiba korretta, u li taf dan jiswa aktar milli tkun kapaċi timplimenta l-ħaġa li m'għandekx timplimenta.
Assumi li kull talba tasal darbtejn
Din hija dik li nżbaljaha kieku ma kontx diġà tgħallimtha bl-iebes. In-networks jieqfu bil-timeout, l-utenti jikklikkjaw darbtejn, il-klijenti mobbli jerġgħu jipprovaw awtomatikament, u xejn minn dan mhu mhux tas-soltu. Endpoint ta' pagament li jiċċarġja darbtejn meta jirċievi l-istess talba darbtejn huwa mikkiser, anki jekk jgħaddi minn kull test li ktibt għalih.
Is-soluzzjoni hija idempotency key mill-klijent u unique constraint fuqha fid-database. Li tiċċekkja jekk il-key teżistix qabel ma tinserixxi jidher li jaħdem, iżda hemm window bejn il-qari u l-kitba fejn żewġ talbiet konkurrenti t-tnejn jgħaddu miċ-check. Ħalli d-database tinfurzaha, aqbad il-falliment, u irritorna r-riżultat li diġà ħżint.
Il-flus qatt m'għandhom ikunu float
decimal, dejjem. L-aritmetika floating-point titlef preċiżjoni b'modi li huma tajbin għal simulazzjoni tal-fiżika u mhux aċċettabbli għal bilanċ. Din hija waħda faċli biex tagħmilha tajjeb u verament ħażina jekk tiżbaljaha.
Aħżen il-munita ma' flimkien mal-ammont ukoll. Ammont mingħajr munita huwa numru, mhux flus, u l-mument li munita t-tieni tidher fis-sistema, kull ammont mingħajr waħda jsir ambigwu.
Iddisinja għall-mistoqsija "x'ġara?"
Il-ħaġa li nsottovalutajt l-aktar: ix-xogħol ta' sistema ta' pagamenti mhux biss li tmexxi l-flus, huwa li tkun tista' tispjega wara x'għamlet u għaliex. Meta klijent jikkontesta ħlas jew provider jistaqsi dwar tranżazzjoni, it-tweġiba trid tiġi minn rekords maħżuna, mhux minn qari tal-kodiċi u tirraġuna x'probabbilment għamel.
Dan ifisser li kull pass sinifikanti jiġi ppersistut, inklużi l-fallimenti. Ifisser ukoll li r-rekords tal-pagamenti ma jitħassrux, għax rekord ta' pagament imħassar huwa evidenza meqruda minflok dejta rranġata.
Agħmel l-istati espliċiti u t-transizzjonijiet imħarsa
Pagament huwa state machine kemm jekk timmudellah bħala wieħed kif ukoll jekk le. Huwa pending, imbagħad huwa authorised jew declined, imbagħad forsi captured, imbagħad forsi refunded. Jekk dawk l-istati huma sempliċiment qasam ta' string li kollox jista' jikteb fuqu, allura eventwalment xi ħaġa tikteb kombinazzjoni impossibbli u m'hemm ebda rekord ta' kif.
Li tqiegħed it-transizzjonijiet ġewwa l-entità nnifisha, biex waħda invalida titfa' eċċezzjoni minflok issalva bil-mod, tiswa ftit ħafna u tibdel klassi ta' bug f'eċċezzjoni li verament tista' tara.
Il-fallimenti mhumiex kollha l-istess
Fondi insuffiċjenti u card irrapportata misruqa huma t-tnejn declines, u li tittrattahom bl-istess mod hija żball. Waħda hija temporanja u ta' min jerġa' jipprova, l-oħra hija finali u li terġa' tipprova xi mkien ieħor hija sempliċiment frodi bi pass żejjed. Kwalunkwe loġika ta' retry teħtieġ tkun taf liema tip ta' falliment qed tħares lejh qabel ma tiddeċiedi li terġa' tipprova.
Fuqiex nitlob l-għajnuna
Reconciliation, il-proċess li tikkonferma li dak li s-sistema tiegħek taħseb li ġara jaqbel ma' dak li l-provider jgħid li ġara. Nifhem li jimporta u m'għandix esperjenza reali fih, u huwa t-tip ta' ħaġa fejn li tiżbalja hija għalja u kwieta.
Ukoll kwalunkwe ħaġa li tinvolvi diversi muniti b'konverżjoni reali, u kwalunkwe ħaġa li tmiss il-payouts minflok il-collections. Naf biżżejjed biex naf li dawk huma aktar profondi milli jidhru.
Il-forma ġenerali tagħha
Uża provider għad-dejta tal-cards. Assumi talbiet duplikati. Uża decimal b'munita espliċita. Ippersisti biżżejjed biex tispjega kwalunkwe tranżazzjoni aktar tard. Immudella l-istati b'mod espliċitu. Iddistingwi bejn fallimenti li ta' min terġa' tipprovahom minn dawk finali. U kun onest dwar liema partijiet trid li senior jirrevedi qabel ma jersaq lejn flus reali.