doctrine project

Post on 07-Dec-2014

154 Views

Category:

Software

8 Downloads

Preview:

Click to see full reader

DESCRIPTION

Ao contrário do que todo mundo pensa, o Doctrine não é somente um Mapeador de objeto relacional. É um projeto focado em desenvolver soluções para persistência de dados e tecnologias relacionadas. Nessa palestra você verá o uso de várias ferramentas que fazem o uso de pacotes do projeto que serão úteis no seu ambiente desenvolvimento desde a implementação ao deploy.

TRANSCRIPT

PHPMGTalks #3 – 13 de Abril de 2013

Eu!

● Daniel Lima– @yourwebmaker– fb.com/dlpinheiro– Arquiteto de aplicações na – Produtor musical & DJ– Biker– Skater– Drunk– ...

Agenda

● O que é o Doctrine na verdade?– O projeto– Libs:

● ORM● ODM: MongoDB, CouchDB● DBAL: Migrations● Common: Annotations, Cache, Data Fixtures, Inflector

● Doctrine e outros projetos

Vamos começar!

O Projeto

● O que é o Doctrine na verdade?– “The Doctrine Project is the home of a selected set

of PHP libraries primarily focused on providing persistence services and related functionality. Its prize projects are a Object Relational Mapper and the Database Abstraction Layer it is built on top of.” - http://www.doctrine-project.org/

Ou seja...

Não é somente um ORM!

Colaboradores

● Guilherme Blanco …. Éééééé do Brasilll!!!!● Jonathan H. Wage● Benjamin Eberlei● Bulat Shakirzyanov● Fabien Potencier● Roman S. Borschel● ….... Você!

Agora, vamos conhecer algumas libraries do

Doctrine!

ORM: Mapeador de Objeto Relacional● É a lib mais conhecida pela comunidade● Facilita o desenvolvimento voltado ao Domínio

(problema) da aplicação● Aproxima o modelo entidade-relacionamento

ao modelo Orientado a Objetos● Não é necessário escrever SQL● Não é esse MONSTRO todo que pensam...● RTFM!!!

ORM: Mapeador de Objeto Relacional

Passo a passo comum:– Crie suas tabelas– Crie suas classes– Mapeie suas classes– Instancie suas classes– Salve seus objetos– Traga seus objetos salvos

Crie suas tabelas no banco de dados

Crie suas classes

Crie suas classes

Mapeie suas classes● Classe “Usuario” mapeada

– https://gist.github.com/yourwebmaker/5369280#file-usuario-php

● Classe “Grupo” mapeada– https://gist.github.com/yourwebmaker/5369280#fil

e-grupo-php

Instancie suas classes

Instancie suas classes

Salve seus objetos

Traga seus objetos salvos

ODM: Mapeador para No-SQL● Mesmo “Conceito” do ORM, mas trabalha

somente com bancos No-Sql● Oferece funcionalidades extras que os Clients

No-Sql não oferecem:– Event Manager– EntityRepositories– Herança

● MongoDB, CouchDB, OrientDB...● O projeto Doctrine\KeyValueStore pretende

padronizar o uso de bancos No-Sql.

DBAL: Data Base Abstraction & Access Layer

● Camada de abstração de banco de dados sobre a PDO

● Oferece funcionalidades extras à PDO● ORM faz uso da DBAL

DBAL: Alguns Recursos extras à PDO● Cache

DBAL: Alguns Recursos extras à PDO● Eventos

DBAL: Alguns Recursos extras à PDO● Tipos

– CREATE DOMAIN MyMoney AS DECIMAL(18,3);– Definindo um tipo:

https://gist.github.com/yourwebmaker/7a61f175c759cf00096d#file-moneytype-php

– Adicionando um tipo:

DBAL: Alguns Recursos extras à PDO● Schema-Manager

DBAL: Alguns Recursos extras à PDO● Schema-Representation

DBAL: Alguns Recursos extras à PDO● Schema-Representation

DBAL: Alguns Recursos extras à PDO● Query Builder

Common\Annotations● /**

* @var * @todo * @Entity(repositoryClass=”XRepository”) * @ORM\Entity * @Assert\NotBlank() */

● "Annotations provide data about a program that is not part of the program itself. They have no direct effect on the operation of the code they annotate." Oracle

● São como arquivos de configuração

Common\Annotations

Common\Cache● ApcCache (requires ext/apc)● ArrayCache (in memory, lifetime of the request)● FilesystemCache (not optimal for high concurrency)● MemcacheCache (requires ext/memcache)● MemcachedCache (requires ext/memcached)● PhpFileCache (not optimal for high concurrency)● RedisCache.php (requires ext/phpredis)● WinCacheCache.php (requires ext/wincache)● XcacheCache.php (requires ext/xcache)● ZendDataCache.php (requires Zend Server Platform)

Common\Cache

Common\DataFixtures

Common\DataFixtures

Common\Inflector

DBAL\Migrations● “The Doctrine Migrations offer additional

functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and powerful tool.”

● Instale na munheca... ou... use o PHAR!● 1000000x.... USE O PHAR!

DBAL\Migrations

DBAL\Migrations● Configuração

– table_name: doctrine_migration_versions

migrations_directory: /path/to/migrations/classes/DoctrineMigrations

migrations:

migration1:

version: 20100704000000

class: DoctrineMigrations\NewMigration

DBAL\Migrations● $ doctrine-migrations:generate

Generated new migration class to "/path/to/migrations/classes/DoctrineMigrations/Version20100416130422.php"

DBAL\Migrations

DBAL\Migrations

DBAL\Migrations$ ./doctrine migrations:status

== Configuration

>> Name: Doctrine Sandbox Migrations

>> Database Driver: pdo_mysql

>> Database Name: testdb

>> Configuration Source: /Users/jwage/Sites/doctrine2git/tools/sandbox/migrations.xml

>> Version Table Name: doctrine_migration_versions

>> Migrations Namespace: DoctrineMigrations

>> Migrations Directory: /Users/jwage/Sites/doctrine2git/tools/sandbox/DoctrineMigrations

>> Current Version: 2010-04-16 13:04:22 (20100416130422)

>> Latest Version: 2010-04-16 13:04:22 (20100416130422)

>> Executed Migrations: 0

>> Available Migrations: 1

>> New Migrations: 1

== Migration Versions

>> 2010-04-16 13:04:01 (20100416130401) not migrated

DBAL\Migrations$ ./doctrine migrations:migrate --dry-run

Are you sure you wish to continue?

y

Executing dry run of migration up to 20100416130452 from 0

>> migrating 20100416130452

-> CREATE TABLE users (username VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL) ENGINE = InnoDB

DBAL\Migrations$ ./doctrine migrations:migrate 0

Are you sure you wish to continue?

y

Migrating down to 0 from 20100416130422

-- reverting 20100416130422

-> DROP TABLE addresses

-- reverted

-- reverting 20100416130401

-> DROP TABLE users

-- reverted

Doctrine e outros projetos● Symfony

– Validators

– Router

● Zend Framework 2● Zend Framework 1● JSM\Serializer● DMS\Filter● SuaSempresa\SuaLib

Como obter ajuda?● Google Groups:

– Doctrine-user

– Doctrine-dev

– Doctrine-BR

● IRC– irc.freenode.net/doctrine

– irc.freenode.net/doctrine-dev

– irc.freenode.net/doctrine-mongodb-odm

● LEIA O MANUAL DE CABO A RABO!

Contribuindo com o Doctrine● http://www.doctrine-project.org/contribute.html● https://github.com/doctrine

– Há sempre projetos interessantes lá =)

Reflexões...

Perguntas?

Obrigado!

top related