ActiveRecord

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 25. syyskuuta 2019 tarkistetusta versiosta . tarkastukset vaativat 3 muokkausta .
ActiveRecord
aktiivinen tietue
Kuvattu suunnittelukuvioissa Ei

Aktiivinen tietue ( AR ) on sovelluksen suunnittelumalli, jonka Martin Fowler kuvailee Patterns of Enterprise Application Architecturessa . AR on suosittu tapa käyttää relaatiotietokantatietoja olioohjelmoinnissa .

Active Record -skeema on tapa käyttää tietokannan tietoja. Tietokantataulukko tai -näkymä on kääritty luokkiin. Siten objektiinstanssi on sidottu yhdelle riville taulukossa. Kun objekti on luotu, taulukkoon lisätään uusi rivi tallennusta varten. Jokainen ladattu objekti saa tietonsa tietokannasta. Kun objekti päivitetään, myös vastaava rivi taulukossa päivitetään. Kääritysluokka toteuttaa aksessorimenetelmiä tai ominaisuuksia taulukon tai näkymän jokaiselle sarakkeelle.

Tätä mallia käyttävät yleisesti objektin pysyvyystyökalut ja objektirelaatiomappaukset ( ORM ). Tyypillisesti viiteavainsuhteet esitetään oikean tyyppisenä objekti-ilmentymänä ominaisuuden kautta.

Tämän mallin toteutukset rikkovat usein SRP-periaatetta ( Single Responsibility Principle ) yhdistämällä sekä objektin esityksen ja sisäisen logiikan että CRUD-mekanismit yhdessä objektissa , joten Active Recorda voidaan pitää anti -mallina [1] . Muissa tapauksissa tämä väite on kiistanalainen, koska itse ActiveRecordin toteuttava objekti ei sisällä liiketoimintalogiikkaa, mutta tarjoaa taulukon tietokannasta, sillä on vain yksi syy muutokseen (taulukon vaihtamiseen), mikä ei ole ristiriidassa SRP-periaatteen määritelmä [2] .

Active Record -toiminnan yleinen periaate

Olkoon tietokannassa taulukko . _ Tätä taulukkoa varten luodaan erityinen AR- luokka , joka on taulukon heijastus (esitys) siten, että:

Toteutus

AR-konseptin toteutus on olemassa useissa kehitysympäristöissä eri ohjelmointikielille. Jos tietokannassa on esimerkiksi taulukko , jossa on partskentät name(merkkijonotyyppi) ja (numerotyyppi) priceja Active Record -malli on toteutettu luokassa Part, seuraava pseudokoodi:

osa = uusi osa() part.name = "Esimerkkiosa" osa.hinta = 123,45 part.save()

luo taulukkoon uuden tietueen partsannetuilla arvoilla ja vastaa suunnilleen SQL - komentoa

INSERT INTO osat ( nimi , hinta ) VALUES ( 'Näyteosa' , 123 . 45 );

Toisaalta luokkaa voidaan käyttää tietokannan kyselyyn:

b = Part.find_first("nimi", "vaihdelaatikko")

Tämä koodi luo luokasta uuden esiintymän Parttaulukosta ensimmäisen löydetyn tietueen tietojen perusteella parts, jonka kenttä on nameyhtä suuri kuin "vaihdelaatikko".

SQL-komento voi olla samanlainen kuin jokin seuraavista riippuen SQL :n toteutuksesta tietyssä tietokannassa:

SELECT * FROM osat WHERE nimi = 'vaihdelaatikko' RAJA 1 ; -- MySQL tai PostgreSQL

tai

SELECT * FROM osat WHERE nimi = 'vaihdelaatikko' ja rivinumero < 2 ; -- Oraakkeli

tai

SELECT TOP 1 * osista WHERE nimi = ' vaihdelaatikko ' ; -- Microsoft SQL Server

Toteutusesimerkkejä: Yii [3] ja Kohana PHP :lle . Huomionarvoista on CodeIgniter-kehys , jossa on sisäänrakennettu ActiveRecord-luokka, joka on tietokantakyselyn rakentaja, mutta joka ei ole esimerkki Active Record -mallin toteutuksesta.

Katso myös

Muistiinpanot

  1. Pablo's SOLID Software Development 8. - "Hyvä anti-esimerkki on Active Record -kuvio." Tämä malli on ristiriidassa SRP:n kanssa. Toimialueen entiteetti käsittelee tietojensa pysyvyyttä. (Huomaa: Active Record -käytössä ei ole mitään vikaa; olen käyttänyt sitä äskettäin nopealla esittelysivustolla ja se toimi täydellisesti) Normaalisti ohjainmenetelmä/toiminto siirtäisi "hydratoidun" kokonaisuuden arkiston menetelmälle ilmentymä." Haettu 31. heinäkuuta 2017. Arkistoitu alkuperäisestä 29. elokuuta 2017.
  2. Sergei Protko (fesor). AR, määritelmänsä mukaan, rikkoo sitä ja on suunniteltu rikkomaan sitä.  // https://habrahabr.ru/.+ Arkistoitu 31. heinäkuuta 2017.
  3. Esimerkki aktiivisen tietueen käytöstä Yii-kehyksessä Arkistoitu 10. helmikuuta 2010 Wayback Machinessa Arkistoitu 10. helmikuuta 2010.

Linkit