I-Vela β†’ inqolobane ehlakaniphile yochungechunge lwesikhathi nokuningi

Ku-fintech, ngokuvamile kufanele sicubungule amanani amakhulu kakhulu wedatha yezinga lokushintshaniswa kwemali. Sithola idatha evela emithonjeni ehlukene, futhi ngamunye wabo unombono wawo wokuthi ungawakhipha kanjani amanani okushintshanisa kusasa, usuku lwakusasa, inyanga ezayo kanye neminyaka emithathu elandelayo. Ukube othile ubengabikezela amanani kwesokudla, kungaba yisikhathi sokuvala ibhizinisi futhi nje ngobuwula ushintshe imali emuva naphambili. Eminye imithombo inokwethenjelwa kakhulu, eminye ihlinzeka ngodoti ophelele, ngokufakwa okungajwayelekile kwamanani acishe alungile, kodwa okwemibhangqwana engavamile. Umsebenzi wethu ukuhlunga kulawa mashumi ezinkulungwane zamanani ngomzuzwana futhi sinqume ukuthi yini okufanele siyibonise kumakhasimende. Kudingeka sihlunge inani elilungile emathanini okungcola nodaka, njengoba nje kwenza ama-flamingo ngesikhathi sokudla kwasemini.

I-Vela β†’ inqolobane ehlakaniphile yochungechunge lwesikhathi nokuningi

Isici esikhethekile sama-flamingo uqhwaku lwawo olukhulu olugobile olugobile, ahlunga ngalo ukudla emanzini noma odakeni.
 - Wiki

Wazalwa kanjalo umtapo wolwazi Vela, egcina inqolobane yesimo yamanani amaningi ngezikhathi ezithile. Ngaphansi kwe-hood, ihlunga idatha embi nephelelwe yisikhathi endizeni, futhi inikeza nokufinyelela kokwakamuva N amanani aqinisekisiwe okhiye ngamunye (amapheya emali, kithi).

Ake sithi siqoqa amanani amapheya emali amathathu. Incazelo elula kakhulu Vela ukugcina isimo samanje kuzobukeka kanjena:

defmodule Pairs do
  use Vela,
    eurusd: [sorter: &Kernel.<=/2],
    eurgbp: [limit: 3, errors: 1],
    eurcad: [validator: Pairs]

  @behaviour Vela.Validator

  @impl Vela.Validator
  def valid?(:eurcad, rate), do: rate > 0
end

Ibuyekeza Amanani

Vela.put/3 Umsebenzi uzokwenza okulandelayo ngokulandelana:

  • izobangela validator kunani, uma kuchazwa eyodwa (bheka isahluko Ukuqinisekisa ngezansi);
  • izongeza inani kumugqa wamanani amahle uma ukuqinisekiswa kuphumelele, noma kumugqa wesevisi :__errors__ kungenjalo;
  • izobangela ukuhlunga uma sorter ichazwe ngokhiye onikeziwe, noma izovele ibeke inani ekhanda lohlu (I-LIFO, bheka isahluko Ukuhlunga ngezansi);
  • izonquma umugqa ngokuya ngepharamitha :limit wadluliswa ekudalweni;
  • izobuyisela isakhiwo esibuyekeziwe Vela.

iex|1 > pairs = %Pairs{}
iex|2 > Vela.put(pairs, :eurcad, 1.0)
#β‡’ %Pairs{..., eurcad: [1.0], ...}
iex|3 > Vela.put(pairs, :eurcad, -1.0)
#β‡’ %Pairs{__errors__: [eurcad: -1.0], ...}
iex|4 > pairs |> Vela.put(:eurusd, 2.0) |> Vela.put(:eurusd, 1.0)
#β‡’ %Pairs{... eurusd: [1.0, 2.0]}

Futhi Vela izinto zokusebenza Access, ukuze ukwazi ukusebenzisa noma yimiphi imisebenzi evamile ukuze ubuyekeze izakhiwo ezijulile ezivela kunqolobane ukuze ubuyekeze amanani Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2, Futhi Kernel.get_and_update_in/3.

Ukuqinisekisa

Isiqinisekisi singachazwa ngokuthi:

  • umsebenzi wangaphandle nge-agumenti eyodwa (&MyMod.my_fun/1), izothola inani lokuqinisekiswa kuphela;
  • umsebenzi wangaphandle onezimpikiswano ezimbili, &MyMod.my_fun/2, uzothola ipheya serie, value ukuze kuqinisekiswe;
  • ukusebenza kwemojula Vela.Validator;
  • ipharamitha yokumisa threshold, futhi - ngokuzikhethela - compare_by, bheka isahluko Ukuqhathanisa ngezansi.

Uma ukuqinisekiswa kuphumelele, inani lengezwa ohlwini ngaphansi kokhiye ohambisanayo; uma kungenjalo, i-tuple {serie, value} iya ku :__errors_.

Ukuqhathanisa

Amanani agcinwe kule migqa angaba yinoma yini. Ukufundisa Vela ukuziqhathanisa, kuyadingeka ukudlulisa compare_by ipharamitha encazelweni yochungechunge (ngaphandle uma amanani engenakuqhathaniswa nejwayelekile Kernel.</2); le pharamitha kufanele ibe yohlobo (Vela.value() -> number()). Ngokuzenzakalelayo ilula & &1.

Futhi, ungadlulisela ipharamitha encazelweni yomugqa comparator ukubala amanani e-delta (min/max); isibonelo, ngokudlulisela Date.diff/2 njengomqhathanisi, ungathola i-deltas efanele yamadethi.

Enye indlela elula yokusebenza ukudlula ipharamitha threshold, echaza isilinganiso esiphezulu esivumelekile senani elisha kuya {min, max} isikhawu. Njengoba kucaciswe njengephesenti, isheke alisebenzisi comparatorkodwa usasebenzisa compare_by. Isibonelo, ukuze ucacise inani le-threshold lezikhathi zedethi, kufanele ucacise compare_by: &DateTime.to_unix/1 (ukuthola inani eliphelele) kanye threshold: 1, okwenza amanani amasha avunyelwe kuphela uma engenile Β±band isikhawu ukusuka kumanani amanje.

Ekugcineni, ungasebenzisa Vela.equal?/2 ukuqhathanisa izinqolobane ezimbili. Uma amanani echaza umsebenzi equal?/2 noma compare/2, khona-ke le misebenzi izosetshenziselwa ukuqhathanisa, ngaphandle kwalokho sisebenzisa ngobuwula ==/2.

Ukuthola amanani

Ukucubungula isimo samanje kuvame ukuqala ngokushaya ucingo Vela.purge/1, esusa amanani aphelelwe yisikhathi (uma validator iboshelwe ku timestamps). Ungafona ke Vela.slice/1ezobuya keyword ngamagama emigqa njengokhiye kanye neyokuqala, amanani angempela.

Ungasebenzisa futhi get_in/2/pop_in/2 ngokufinyelela kwezinga eliphansi kumanani kumugqa ngamunye.

Uhlelo lokusebenza

Vela kungaba usizo ngokwedlulele njengenqolobane yochungechunge lwesikhathi esimweni senqubo GenServer/Agent. Asifuni nanini ukusebenzisa amanani ezifundo zakudala, futhi ukwenza lokhu simane sigcine inqubo icutshunguliwe Vela, nesiqinisekisi esiboniswe ngezansi.

@impl Vela.Validator
def valid?(_key, %Rate{} = rate),
  do: Rate.age(rate) < @death_age

ΠΈ Vela.purge/1 isusa buthule wonke amanani amadala njalo lapho sidinga idatha. Ukufinyelela amanani wangempela sivele sishayele Vela.slice/1, futhi lapho kudingeka umlando omncane wesifundo (lonke uchungechunge), sivele siwubuyisele - osewavele uhleliwe - onamanani aqinisekisiwe.

Jabulela ukugcinwa kwesikhashana kochungechunge lwesikhathi!

Source: www.habr.com

Engeza amazwana