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] .
Olkoon tietokannassa taulukko . _ Tätä taulukkoa varten luodaan erityinen AR- luokka , joka on taulukon heijastus (esitys) siten, että:
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 PostgreSQLtai
SELECT * FROM osat WHERE nimi = 'vaihdelaatikko' ja rivinumero < 2 ; -- Oraakkelitai
SELECT TOP 1 * osista WHERE nimi = ' vaihdelaatikko ' ; -- Microsoft SQL ServerToteutusesimerkkejä: 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.