Tietojen kirjoittaminen useisiin objekteihin: Kuinka välttää tämä
Tiedät ne ajat, kun työskentelet ohjelman parissa, ja koodissasi on paikkoja, jotka vaatimuksista tai jollakin tavalla ilmenevästä virheestä riippuen liittyvät suoraan siihen, että sinulla on useita objekteja kirjoittamassa tietoja. samaan tietovarastoon? Se ei ole hyvä asia.
Se on kauhea tapa aloittaa postaus. Anna minun kokeilla sitä uudelleen.
Useita kohteita kirjoittavat tietoja
Oletetaan, että työskentelet ohjelman parissa ja yksi koodin tehtävistä on päivittää laskurin jossain tietokannassa seuratakseen kuinka monta muutosta on tapahtunut pienen ajanjakson aikana.
Ongelma: Sinulla on useita paikkoja koodissa, jotka päivittävät tätä laskuria.
Useita objekteja kirjoittavat tiedot (jos käsialani on niin lukukelvoton kuin miltä se näyttää).
En usko, että monet meistä aikovat kirjoittaa tällaista koodia, mutta niin tapahtuu, ja kun se tekee, se saa kaikki nämä sivuvaikutukset, jotka vain synnyttävät kaikenlaista funky-käyttäytymistä. (En tiedä virallista, akateemista termiä sille – enkä tarkoita KUIVAA – mutta tämän postauksen "funky-käyttäytyminen" sopii minulle.)
Tiedämme intuitiivisesti, että meillä pitäisi olla yksi paikka, jossa tämä kaikki tapahtuu, ulkoiset tekijät – olipa se sitten laajuus, väärinymmärrys meiltä vaatimusten ymmärtämisessä tai mikä tahansa – synnyttävät huonoa koodausta.
Joten meillä on kaikki nämä entiteetit koko järjestelmässämme, joista jokainen puhuu yhdelle pisteelle tietokannassamme (tai mihin tahansa haluamaasi tietovarastoon), mutta yksikään niistä ei ole tietoinen muiden puhuvan heille.
Aseta rajat
Voimme yrittää taistella tätä vastaan ehdoin ja millä ei, mutta teemme siitä vain pahemman. Joten mitä meidän pitäisi tehdä?
Tiedän, kuten monien ohjelmoinnin asioiden kanssa, on olemassa useita tapoja ratkaista tämä, mutta ehkä yksi ensimmäisistä uudelleenjärjestelyn vaiheista on saada luokka, joka vastaa päivitysten julkaisemisesta tietovarastoon.
Tällä tavalla voimme siirtyä yllä olevasta kuvasta johonkin tällaiseen:
Tietojen kirjoittaminen useisiin objekteihin: Lähetä se eräänlaiselle välittäjälle.
Eli kaikki entiteetit ovat yhteisössä tämän objektin ja tämän objektin kanssa – ja vain tämä objekti voi lukea ja kirjoittaa tietoja tietokantaan.
On olemassa muutamia suunnittelumalleja, jotka sopivat tähän ongelmaan, mutta ne eivät kuulu tämän viestin soveltamisalaan. Sen sijaan yritän korostaa, että jos kohtaat seuraavan ongelman:
- Entiteetit kirjoittavat tietoja tietovarastoon,
- Useat tahot tekevät sitä,
- Ja se synnyttää tahattomia seurauksia,
Yritä sitten luoda luokka tai luokkaryhmä, joka on tiukasti vastuussa tietojen lukemisesta ja kirjoittamisesta. Anna tiedon kulkea vain näiden luokkien läpi sen sijaan, että useat luokat käsittelevät tietoja.
Se helpottaa testaamista, helpottaa virheenkorjausta ja helpottaa viime kädessä lukemista.
