Zend Framework Object Relation Model. Dr Nenad Kojić Marko M Spasojević inž. spec

Podobné dokumenty
SOFTVERSKA ARHITEKTURA ZA TRANSFORMACIJU GEOPROSTORNIH PODATAKA SOFTWARE ARCHITECTURE FOR TRANSFORMATION OF GEOSPATIAL DATA

Kód, který se nebude často měnit

Mediji za prenos podataka

Úvod - problém. Při přidání nového modelu je nutné upravit. Kód, který se nebu de často měnit. n Mějme obchod s auty:


CMS LARS VIVO VERZE 1.2 Z POHLEDU VIVOJÁŘE

korisničko uputst vo 10/14 C-EBKU-03

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

MIFID_FORMS_LIST_SLV

Object-relational mapping (JPA, Hibernate)

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Pokročilé schopnosti OOP

Typický prvek kolekce pro české řazení

IT Arhitektura Globalno Belma Ohranović IT Auditor

Nasazení Object Relation Mapping nástrojů nad legacy datovým modelem


Diferencne jednačine. Gospava B. Dor dević i Snežana S. Dor dević

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

Verzování a publikace dat na webu za pomoci PostgreSQL

Objektově orientované programování v PHP 5. Martin Klíma

Car Agent. Struktura chování:

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

20. Projekt Domácí mediotéka


Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Rezervační systém Tvorba WWW stránek

ZA HIDRAULIČKE SERVOUPRAVLJAČE

Principy objektově orientovaného programování


Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí


Abstraktní datové typy: zásobník

Bottle -- příklad. Databáze. Testovací data. id Jedinečný identifikátor řádku: Bude typu INT s AUTO_INCREMENT a nastavíme ho jako primární klíč

Algoritmizace a programování

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))


Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.

IZJAVA O SVOJSTVIMA CPR

3. UVOD U RAČUNARE 3.1 ŠTA RACUNAR MOŽE DA RADI?

Java - výjimky. private void vstup() throws IOException {... }

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Použití databází na Webu

Dědičnost (inheritance)

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Distribuované systémy a výpočty

Programování v jazyce JavaScript

DPKOM_06 Dědičnost entit a zpětná volání posluchači

KTE / ZPE Informační technologie

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

PG 9.5 novinky ve vývoji aplikací

Úvod do programovacích jazyků (Java)

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Základy programování v jazyce JAVA

Izjava o svojstvima. IZJAVA O SVOJSTVIMA Temeljem dodatka III Uredbe (EU) 305/2011 Sika WT-200 P



Jazyk C++ I. Šablony 2

ASP.NET MVC. Michal Horák 2008

Plánování a vývoj základního frameworku

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

JUnit příklad na použití

Objektově orientované programování

Čipové karty Lekařská informatika

Izjava o svojstvima. IZJAVA O SVOJSTVIMA Temeljem dodatka III Uredbe (EU) 305/2011 Sikafloor -CureHard-18


Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Jazyk C# - přístup k datům

2. Entity, Architecture, Process

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2008 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 24

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Code Contracts. Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz

NA CO SI DÁT POZOR V JAVASCRIPTU? Angular.cz

Formuláře. Internetové publikování

typová konverze typová inference

Třídy a objekty -příklady

Generické programování

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Š š ť ó ťď ť Ď Ň É Ý Ý

Seminář Java IV p.1/38

Databáze I. Přednáška 7

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Polymorfismus. Porovnání jazyků z hlediska polymorfismu Jazyky C, C++, C# Jazyk Java PHP a jiné Na závěr souhrn vlastností jednotlivých jazyků

RMI Remote Method Invocation

Databáze II. 1. přednáška. Helena Palovská

11. Dědičnost. Dědičnost strana 103

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Upute za korištenje aplikacije EMA Polaznici edukacije. Sadržaj


Kurz Databáze. Přechod na SQL server. Obsah. Vytvoření databáze. Lektor: Doc. Ing. Radim Farana, CSc.

Enterprise Java Beans 3.0


Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Tabulka fotbalové ligy

Začínáme s vývojem pro Android

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Transkript:

Zend Framework Object Relation Model Dr Nenad Kojić Marko M Spasojević inž. spec

Uvod Kako obezbediti vezu izmeñu koda i podataka Uvek je bio problem pronaći zajednički jezik izmeñu dva pristupa u opisivanju podataka Interpretacija podataka u bazi podataka Interpretacija podataka u OO jeziku

Zašto ORM? Neslaganje izmeñu objektnog i relacionog modela OO programiranje je zasnovano na nasleñivanju i ekapsulaciji Relacioni model je zasnovan na matematičkim principima- teorija skupova Svaki o ovih pritupa ima svoje prednosti i mane OO model se fokusira na izradu aplikacija preko objekata koji sadrže podatke i akcije (metode) Relacioni model se fokusira skladištenje podataka

Šta je ORM? Object Relation Model Programerska tehnika za konverziju podataka izmeñu nekompatibilnih sistema i OO jezika. Predstavlja sloj veze izmeñu (adapter) strukture baze podataka i objekata u okviru OO napisanog koda.

Mapiranje podataka-datamapper Predstavlja adapter (man in the middle) izmeñu podataka u bazi podataka i objekata u PHP-u tj. Zend Framework-u Omogućava da objekat ne mora da zna odakle podaci dolaze (baza podataka, servis, fajl...) Ovaj pristup čini naš kod veoma skalabilnim Postoje u paketi za automatsko mapiranje podataka kao što je Doctrine

DataMapping u Zend Framework-u Mapiranje podataka je sastavni deo modela Ceo kod koji se tiče mapiranja smešten je u celini models Grubo gledano sastoji se iz 3 koraka 1. Opis tabele preko klase 2. Opis entiteta preko klase 3. Definisanje modela

Opis tabele preko klase Zend_Db_Table_Abstract Klasa izvedena iz klase Zend_Db_Table_Abstract Osobine tabele se opisuju kroz svojstva objekta Kreira se komandom zf create db-table ImeKlase Imetabele Lokacija models/dbtable Neka od osnovnih svojstava su: $_name predstavlja ime tabele u bazi (ako ovoga nema onda se uzima ime klase koje mora biti isto kao u bazi) $_primary definisanje primarnog ključa $_dependenttables definisanje zavisnih tabela (tabele u kojima je neka od kolona strani ključ)

Opis tabele preko klase Zend_Db_Table_Abstract - Primer class Application_Model_DbTable_Galerije extends Zend_Db_Table_Abstract{ protected $_name = 'galerija'; protected $_id='idgalerija'; protected $_dependenttables=array('application_model_ DbTable_Slike');

Opis tabele preko klase Zend_Db_Table_Abstract Mogućnost redefinisanja metoda u specijalnim slučajevima kao na primer unos veze u vezivnu tabelu public function insert(array $data){ if (empty($data['created_on'])) { $data['created_on'] = time(); return parent::insert($data); public function update(array $data, $where){ if (empty($data['updated_on'])) { $data['updated_on'] = time(); return parent::update($data, $where);

Kreiranje modela Kreiranje modela zf create model ImeModela Klasa koja opisuje entitet class Application_Model_Galerija{ protected $_id; protected $_naziv; protected $_slike; public function setid($id){ $this->_id=$id; return $this; public function getid(){ return $this->_id; public function setnaziv($text){ $this->_naziv=$text; return $this; public function getnaziv(){ return $this->_naziv; public function getslike(){ return $this->_slike; public function setslike($slike){ $this->_slike=$slike; return $this;

Kreiranje Mapper-a u modelu Predstavlja klasu (adapter) izmeñu tabele i konkretnog objekta zf create model ImeMapper class Application_Model_GalerijeMapper{ protected $_dbtable; public function setdbtable($dbtable){ if(is_string($dbtable)){$dbtable=new $dbtable(); if(!$dbtable instanceof Zend_Db_Table_Abstract){ throw new Exception("Nepostojeci table geteway"); $this->_dbtable=$dbtable; return $this; public function getdbtable(){ if(null==$this->_dbtable){ $this->setdbtable('application_model_ DbTable_Galerije'); return $this->_dbtable; public function save(application_model_ Galerija $galerija){ $data=array( 'naziv'=>$galerija->getnaziv() ); if(null===($id=$galerija->getid())){ unset($data['id']); $this->getdbtable()->insert($data); else{ $this->getdbtable()-> update($data,array('idgalerija=?'=>$id));...

Mapiranje i definisanje relacija U okviru klase Zend_Db_Table_Abstract Definisanje zavisnosti $_dependenttables=array( Ime_klase_tabele') Definisanje stranog ključa $_referencemap=array( ime_veze'=>array( 'columns'=>array( kolone'), 'reftableclass'=> tabela_sa_primarnim_ključem', 'refcolumns'=>array( primarni_ključ') ), );

Primer relacije Galerija Slika class Galerija extends Zend_Db_Table_Abstract{ protected $_name = 'galerija'; protected $_id='idgalerija'; protected $_dependenttables=array('slika'); class Slika extends Zend_Db_Table_Abstract{ protected $_name = 'slika'; protected $_id='idslika'; protected $_referencemap=array( 'Galerija'=>array( 'columns'=>array('idgalerija'), 'reftableclass'=>'galerija', 'refcolumns'=>array('idgalerija') ), );

Korisnik Uloga Relacija n:n KorisnikUloga class Korisnik extends Zend_Db_Table_Abstract{ protected $_dependenttables=array('korisnikuloga'); class KorisnikUloga extends Zend_Db_Table_Abstract{ protected $_referencemap=array( 'Korisnik'=>array( 'columns'=>array('idkorisnik'), 'reftableclass'=>'korisnik', 'refcolumns'=>array('idkorisnik') ), 'Uloga'=>array( 'columns'=>array('iduloga'), 'reftableclass'=>'uloge', 'refcolumns'=>array('iduloga') ), ); class Uloge extends Zend_Db_Table_Abstract{ protected $_dependenttables=array('korisnikuloga');

Preuzimanje podataka preko relacija Preuzimanje zavisnih redova 1:n $galerijared->finddependentrowset('slike') Galerija Slika Preuzimanje zavisnih redova n:n $korisnikred->findmanytomanyrowset('uloga', 'KorisnikUloga', 'Korisnik')) Korisnik Uloga KorisnikUloga

Primer-dijagram baze podataka

Veza strana - tip strane class Application_Model_DbTable_Strane extends Zend_Db_Table_Abstract{ protected $_dependenttables=array('application_model_dbtable_kategorijastrana', 'Application_Model_DbTable_Komentari'); protected $_referencemap=array( 'TipStrane'=>array( 'columns'=>array('idtipstrane'), ); 'reftableclass'=>'application_model_dbtable_tipstrane', 'refcolumns'=>array('idtipstrane') ), 'Korisnik'=>array( 'columns'=>array('idkorisnik'), 'reftableclass'=>'application_model_dbtable_korisnici', 'refcolumns'=>array('idkorisnik') ), class Application_Model_DbTable_TipStrane extends Zend_Db_Table_Abstract{. protected $_dependenttables=array('application_model_dbtable_strane');...

Veza strana-kategorija_strana-kategorija class Application_Model_DbTable_KategorijaStrana extends Zend_Db_Table_Abstract{ protected $_name = 'kategorija_strana'; protected $_primary='idstrana';//ovo mora ovako u protivnom ne radi dobro protected $_referencemap=array( 'Kategorija'=>array( 'columns'=>array('idkategorija'), 'reftableclass'=>'application_model_dbtable_kategorije', 'refcolumns'=>array('idkategorija') ), 'Strana'=>array( 'columns'=>array('idstrana'), 'reftableclass'=>'application_model_dbtable_strane', 'refcolumns'=>array('idstrana') ), ); class Application_Model_DbTable_Kategorije extends Zend_Db_Table_Abstract{ protected $_name = 'kategorija'; protected $_id='idkategorija'; protected $_dependenttables=array('application_model_dbtable_kategorijastrana');

Toliko za sada!!!

Zend Framework Object Raltion Mapping Dr Nenad Kojić Marko M Spasojević inž. spec