• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Doctrine 2 - An Introduction (German)
 

Doctrine 2 - An Introduction (German)

on

  • 6,265 views

 

Statistics

Views

Total Views
6,265
Views on SlideShare
4,760
Embed Views
1,505

Actions

Likes
0
Downloads
9
Comments
0

2 Embeds 1,505

http://zendframework2.de 1496
http://www.zendframework2.de 9

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Doctrine 2 - An Introduction (German) Doctrine 2 - An Introduction (German) Presentation Transcript

  • Doctrine 2 ORM
  • ORM?
  • Object Relational Mapping
  • Objektgraph Tabellen & Relationen
  • Doctrine 2?
  • Doctrine 2Code-Bibliothek für PHP >= 5.3.2Inspiriert von JPA & HibernateVon den Machern von SymfonyDe-Facto Standard für ORM in PHPFür MySQL & Co., aber ...
  • Doctrine 2... funktioniert auch mit CouchDB, MongoDB& Co.ORM trifft es daher eigentlich gar nicht(mehr)Ziel: „Mach dir keine Sorgen mehr um diePersistenz deiner Objekte.“
  • Doctrine „Projects“ Ab hier ORMwird‘s cool. DBAL Common
  • CommonClass LoadingAnnotations
  • DBALWrapper um PDOVerbindungsmanagementSQL-Query BuilderEvents (z.B. PostConnect)Schema Manager…
  • ORMPersistenz für PHP ObjekteObjekt-Orientierte Abfragesprache (DQL)
  • InstallationVia archive download, git clone oder PEARSetup AutoloaderEntity Manager mit Konfigurationsobjektinitialisieren (DB-Infos, Caching, Pfade, etc.)(alle Details im Manual)
  • Exkurs: ZF-BoilerplateZend FrameworkDevelopmentPlattformZF + Doctrine 2 +PHPUnit + Vagrant +ElasticSearch + ...Virtual BoxOpen Source
  • Exkurs: ZF-BoilerplateInstallation Ruby + Vagrant + Virtual Box lokalgit clone https://michael-romer@github.com/michael-romer/zf-boilerplate.git myApp$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box$ vagrant uphttp://localhost:8080 im Browser aufrufen
  • ORM Akteure EntityManagerEntity Repository
  • EntityPOPO (= Plain Old PHP Object)Keine Persistenz-Basisklasse (mehr)notwendigMeta-Informationen zur Persistenz alsAnnotationen (XML, YAML ebenfalls möglich) Tabellen-Ebene Feld-Ebene Assoziationen
  • Klasse „App“
  • Entity „App“
  • Entity ManagerKonfigurierte Klasse zum Lifecycle-Management der Entities. Verbindungdaten Caching-Konfiguration MetaData-Driver (z.B. Annotations oder YAML) …
  • Entity Manager
  • Entity Manager InternalsUnit-of-Work PatternVerfolgt Änderungen viaIdentity Map mit ObjektkopienDank PHP‘s „Copy-On-Write“resourcenschonendWiederholtes Laden einerEntity aus Map
  • RepositoryLaden von Entities via RepositoriesDefault-Repository für Entities findAll, findOne, findBy, findOneBy, ...Custom-Repositories halten alle DB-Queries
  • Repository
  • Entity „App“ mit Custom Repo
  • DQL (Doctrine Query Language)Abfragesprache, angelehnt an SQL, aber„objektorientiert“ formuliertVereinfacht Umgang mit Objekteigenschaftenund Assoziationen
  • AssoziationenAnalog zu Objekteigenschaften durchAnnotationen kenntlich gemacht1-1, 1-n und n-n, self-referencing, uni- undbidirektionale AssoziationenSupport für Composite Keys
  • Assoziationen
  • Assoziationen
  • Assoziationen
  • Entity ProxiesWird eine App aus der DB geladen, wirdstandardmäßig nicht die Users collectionmitgeladen.Doctrine generiert Proxy-Klassen, diestellvertretend verwendet werden (instanceofUser == true), bis die Entity tatsächlichverwendet wird.Wird eine Assoziation (e.g. foreach)traversiert, erkennt dies Doctrine und lädtalle Entities.
  • VererbungUnterstützung für Mapped Superclass „Daten-Mixin“ Single Table Inheritence Alle Klassen der Hierarchie in einer Tabelle abgebildet Descriminator Column zur Klassenbestimmung Keine Joins notwendigClass Table Inheritence Jede Klasse hat eigene Tabelle mit individuellen Eigenschaften
  • EventsEventsystem für „Custom-Events“Entity-Lifecycle-EventspreRemove, postRemove, prePersist ,postPersist, preUpdate, postUpdate, postLoad,loadClassMetadata, onFlush, onClear
  • SQLNative SQL Abfragen bei Bedarf möglichCustom Mapping von Spalten aufEigenschaftenGgf. Partial Objects zwecks Performance-Optimierung
  • CachingDrivers Array APC Memcached XCacheArten DQL Query Cache (SQL Statements) Result Cache (Entites) Metadata Cache (Annotationen, YAML, etc.)
  • DQL, Teil 2Unterstützung für Aggregationen (z.B. COUNT) Funktionen (z.B. CONCAT) Operatoren (z.B. Arithmetik)
  • TransaktionenImplizit durch „Unit-of-Work“Explizit durch
  • LockingSupport für „User-Think-Time“ LockingOptimistisch „Es wird schon gutgehen!“ Versions-Feld (int oder timestamp) Wirft ggf. ExceptionPessimistisch „Lieber nichts riskieren!“ Nur auf DB-Ebene
  • Doctrine Console (CLI)Installation via PEAR (oder manuell)Standard-Kommandos + Eigene Kommandos(analog Zend_Tool)Doctrine Console $ doctrine orm:generate-entities --help z.B. $ dbal:import / Import SQL file(s) in DB / z.B. $ php doctrine.php orm:schema- tool:create / Erzeugung DB Schema /
  • ExtensionsDoctrine Extensions (Behavior) Versionable Sortable Loggable Translateable Tree / Nested Set …https://github.com/l3pp4rd/DoctrineExtensionshttps://github.com/beberlei/DoctrineExtensions
  • FinDoctrine 2: http://www.doctrine-project.org/Enterprise Patterns: http://martinfowler.com/ZF-Boilerplate: http://zf-boilerplate.comMein Blog: http://www.startup-patterns.de/