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 O...
Doctrine 2... funktioniert auch mit CouchDB, MongoDB& Co.ORM trifft es daher eigentlich gar nicht(mehr)Ziel: „Mach dir kei...
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 ...
Exkurs: ZF-BoilerplateZend FrameworkDevelopmentPlattformZF + Doctrine 2 +PHPUnit + Vagrant +ElasticSearch + ...Virtual Box...
Exkurs: ZF-BoilerplateInstallation Ruby + Vagrant + Virtual Box lokalgit clone https://michael-romer@github.com/michael-ro...
ORM Akteure         EntityManagerEntity               Repository
EntityPOPO (= Plain Old PHP Object)Keine Persistenz-Basisklasse (mehr)notwendigMeta-Informationen zur Persistenz alsAnnota...
Klasse „App“
Entity „App“
Entity ManagerKonfigurierte Klasse zum Lifecycle-Management der Entities.  Verbindungdaten  Caching-Konfiguration  MetaData-...
Entity Manager
Entity Manager       InternalsUnit-of-Work PatternVerfolgt Änderungen viaIdentity Map mit ObjektkopienDank PHP‘s „Copy-On-...
RepositoryLaden von Entities via RepositoriesDefault-Repository für Entities  findAll, findOne, findBy, findOneBy, ...Custom-R...
Repository
Entity „App“ mit Custom         Repo
DQL (Doctrine Query     Language)Abfragesprache, angelehnt an SQL, aber„objektorientiert“ formuliertVereinfacht Umgang mit...
AssoziationenAnalog zu Objekteigenschaften durchAnnotationen kenntlich gemacht1-1, 1-n und n-n, self-referencing, uni- und...
Assoziationen
Assoziationen
Assoziationen
Entity ProxiesWird eine App aus der DB geladen, wirdstandardmäßig nicht die Users collectionmitgeladen.Doctrine generiert ...
VererbungUnterstützung für   Mapped Superclass       „Daten-Mixin“   Single Table Inheritence       Alle Klassen der Hiera...
EventsEventsystem für „Custom-Events“Entity-Lifecycle-EventspreRemove, postRemove, prePersist ,postPersist, preUpdate, pos...
SQLNative SQL Abfragen bei Bedarf möglichCustom Mapping von Spalten aufEigenschaftenGgf. Partial Objects zwecks Performanc...
CachingDrivers  Array  APC  Memcached  XCacheArten  DQL Query Cache (SQL Statements)  Result Cache (Entites)  Metadata Cac...
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)  W...
Doctrine Console (CLI)Installation via PEAR (oder manuell)Standard-Kommandos + Eigene Kommandos(analog Zend_Tool)Doctrine ...
ExtensionsDoctrine Extensions (Behavior)   Versionable   Sortable   Loggable   Translateable   Tree / Nested Set   …https:...
FinDoctrine 2: http://www.doctrine-project.org/Enterprise Patterns: http://martinfowler.com/ZF-Boilerplate: http://zf-boil...
Upcoming SlideShare
Loading in …5
×

Doctrine 2 - An Introduction (German)

8,401 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
8,401
On SlideShare
0
From Embeds
0
Number of Embeds
1,786
Actions
Shares
0
Downloads
32
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • \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)

    1. 1. Doctrine 2 ORM
    2. 2. ORM?
    3. 3. Object Relational Mapping
    4. 4. Objektgraph Tabellen & Relationen
    5. 5. Doctrine 2?
    6. 6. 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 ...
    7. 7. 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.“
    8. 8. Doctrine „Projects“ Ab hier ORMwird‘s cool. DBAL Common
    9. 9. CommonClass LoadingAnnotations
    10. 10. DBALWrapper um PDOVerbindungsmanagementSQL-Query BuilderEvents (z.B. PostConnect)Schema Manager…
    11. 11. ORMPersistenz für PHP ObjekteObjekt-Orientierte Abfragesprache (DQL)
    12. 12. InstallationVia archive download, git clone oder PEARSetup AutoloaderEntity Manager mit Konfigurationsobjektinitialisieren (DB-Infos, Caching, Pfade, etc.)(alle Details im Manual)
    13. 13. Exkurs: ZF-BoilerplateZend FrameworkDevelopmentPlattformZF + Doctrine 2 +PHPUnit + Vagrant +ElasticSearch + ...Virtual BoxOpen Source
    14. 14. 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
    15. 15. ORM Akteure EntityManagerEntity Repository
    16. 16. EntityPOPO (= Plain Old PHP Object)Keine Persistenz-Basisklasse (mehr)notwendigMeta-Informationen zur Persistenz alsAnnotationen (XML, YAML ebenfalls möglich) Tabellen-Ebene Feld-Ebene Assoziationen
    17. 17. Klasse „App“
    18. 18. Entity „App“
    19. 19. Entity ManagerKonfigurierte Klasse zum Lifecycle-Management der Entities. Verbindungdaten Caching-Konfiguration MetaData-Driver (z.B. Annotations oder YAML) …
    20. 20. Entity Manager
    21. 21. Entity Manager InternalsUnit-of-Work PatternVerfolgt Änderungen viaIdentity Map mit ObjektkopienDank PHP‘s „Copy-On-Write“resourcenschonendWiederholtes Laden einerEntity aus Map
    22. 22. RepositoryLaden von Entities via RepositoriesDefault-Repository für Entities findAll, findOne, findBy, findOneBy, ...Custom-Repositories halten alle DB-Queries
    23. 23. Repository
    24. 24. Entity „App“ mit Custom Repo
    25. 25. DQL (Doctrine Query Language)Abfragesprache, angelehnt an SQL, aber„objektorientiert“ formuliertVereinfacht Umgang mit Objekteigenschaftenund Assoziationen
    26. 26. AssoziationenAnalog zu Objekteigenschaften durchAnnotationen kenntlich gemacht1-1, 1-n und n-n, self-referencing, uni- undbidirektionale AssoziationenSupport für Composite Keys
    27. 27. Assoziationen
    28. 28. Assoziationen
    29. 29. Assoziationen
    30. 30. 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.
    31. 31. 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
    32. 32. EventsEventsystem für „Custom-Events“Entity-Lifecycle-EventspreRemove, postRemove, prePersist ,postPersist, preUpdate, postUpdate, postLoad,loadClassMetadata, onFlush, onClear
    33. 33. SQLNative SQL Abfragen bei Bedarf möglichCustom Mapping von Spalten aufEigenschaftenGgf. Partial Objects zwecks Performance-Optimierung
    34. 34. CachingDrivers Array APC Memcached XCacheArten DQL Query Cache (SQL Statements) Result Cache (Entites) Metadata Cache (Annotationen, YAML, etc.)
    35. 35. DQL, Teil 2Unterstützung für Aggregationen (z.B. COUNT) Funktionen (z.B. CONCAT) Operatoren (z.B. Arithmetik)
    36. 36. TransaktionenImplizit durch „Unit-of-Work“Explizit durch
    37. 37. 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
    38. 38. 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 /
    39. 39. ExtensionsDoctrine Extensions (Behavior) Versionable Sortable Loggable Translateable Tree / Nested Set …https://github.com/l3pp4rd/DoctrineExtensionshttps://github.com/beberlei/DoctrineExtensions
    40. 40. FinDoctrine 2: http://www.doctrine-project.org/Enterprise Patterns: http://martinfowler.com/ZF-Boilerplate: http://zf-boilerplate.comMein Blog: http://www.startup-patterns.de/

    ×