SlideShare une entreprise Scribd logo
1  sur  50
Télécharger pour lire hors ligne
DDD e PHP

      Luís Otávio Cobucci Oblonczyk




25 de Agosto de 2012
Luís Otávio Cobucci Oblonczyk
●
    Evangelista (doido por) PHP
●
    Desenvolvedor na Softnex Tecnologia (SC)
●
    Membro do PHPSC
●
    ZCE PHP 5.3
●
    Perfeccionista ao extremo =P


    @lcobucci
    http://about.me/lcobucci
Fácil aprendizado
Inúmeros exemplos




Fácil aprendizado
Inúmeros exemplos
Comunidade ativa




                   Fácil aprendizado
mu
                      Inúmeros exemplos
                ito
Comunidade ativa




                      Fácil aprendizado
mu
                           Inúmeros exemplos
                     ito
 Comunidade ativa




Diversas opções
de frameworks
para facilitar a           Fácil aprendizado
vida
Aprendizado 100% prático, $$$ garantido!
Será?
Conceito ou (infra)estrutura?
Possíveis resultados...
O que é DDD?
“Domain-driven design (DDD) is an approach to
developing software for complex needs by deeply
connecting the implementation to an evolving
model of the core business concepts.
(...)
Domain-driven design is not a technology or a
methodology.”

http://en.wikipedia.org/wiki/Domain-driven_design
Definições básicas
Domínio: área de conhecimento, influência ou
atividade;
Modelo: conjunto de abstrações que descrevem
os aspectos de um domínio;
Linguagem onipresente: linguagem estruturada
com base no modelo e utilizada por todos os
membros da equipe.
Linguagem onipresente
evita desentendimentos.
Requisitos do DDD
●
    Domínio não é trivial
●
    A equipe tem conhecimento técnico e
    experiência    em      desenvolvimento     com
    orientação à objetos (paradigma mais indicado)
●
    A equipe possui acesso ao analista de negócio
●
    O processo de desenvolvimento é iterativo
Camadas de softwares
Softwares podem ser divididos em várias
camadas. Eric Evans diz que “a maior parte das
arquiteturas bem-sucedidas são variações de
quatro camadas conceituais”:
●
    Camada de apresentação (UI);
●
    Camada da aplicação;
●
    Camada do domínio;
●
    Camada da infra-estrutura
Camada de apresentação
“Responsável por mostrar informações         e
interpretar os comandos do usuário.
Onde o agente externo pode ser outro sistema de
computador em vez de um ser humano.”
Camada da aplicação
“Define as funções que o software deve executar
e direciona os objetos expressivos do domínio
para resolver os problemas.”
“Ela não contém as regras ou o conhecimento do
negócio, apenas coordena tarefas e delega
trabalhos.”
Camada do domínio
“Responsável por representar conceitos do
negócio, informações sobre a situação e as regras
do negócio.”
“Esta camada é o coração do software”
Camada de infra-estrutura
“Fornece recursos técnicos genéricos       que
suportam as camadas mais altas.”
“A camada de infra-estrutura pode também
suportar o padrão de interações entre as quatro
camadas através de um framework arquitetural.”
Tipos dos objetos
O DDD divide o domínio em vários tipos de
objetos diferentes, cada qual com sua
responsabilidade definida.
Entidades
Entidades
Objetos que possuem identificação única dentro
do contexto em que ele se aplica, ou seja, para o
domínio do software é fundamental que possua
uma identidade (é único). Basicamente é o lar das
regras de negócio de um software.
Objetos de valor
Objetos de valor
São objetos que participam das regras de negócio,
entretanto são imutáveis e sua identidade não é
relevante. De modo geral, eles apenas
armazenam e transmitem valores.
Serviços
Serviços
Centralizam e organizam as chamadas às
operações das regras de negócio, ou seja, não
possui o conhecimento sobre o funcionamento do
software, porém realiza a ligação entre os objetos
que conhecem. Basicamente são Façades.
Agregados
Agregados
Grupos de objetos associados que são tratados de
forma única. Os objetos são relacionados a uma
raiz e delimitam um limite. A raiz é normalmente
uma ENTIDADE e os objetos associados podem
ser outras ENTIDADES ou OBJETOS DE VALOR.
A raiz restringe o acesso externo aos objetos do
limite, portanto possui a lógica necessária para o
gerenciamento dos mesmos.
Fábricas
Fábricas
Tratam da construção dos objetos (normalmente
entidades e objetos de valor), seu objetivo
principal é simplificar a complexidade da criação
dos objetos (e seus agregados).
Podem ser objetos separados (builders) ou até
métodos dentro da definição da class (factory
methods).
Repositórios
Repositórios
Abstraem o acesso às camadas de persistência
(pertencentes à camada de infra-estrutura).
O objetivo principal é dar a impressão que é uma
grande coleção de objetos, e que tudo está em
memória.
Repositórios
Abstraem o acesso às camadas de persistência
(pertencentes à camada de infra-estrutura).
O objetivo principal é dar a impressão que é uma
grande coleção de objetos, e que tudo está em
memória.


            Repository != DAO
Então tudo é conceitual?
Exato!
A questão principal é como nós organizamos o
nosso software, e principalmente como nós
lidamos com a nossa equipe e com os clientes.
Lembrando sempre de manter a linguagem
onipresente!
Cadê o PHP no meio disso tudo?
Domain Driven Design e PHP
O DDD não restringe sua abordagem a nenhuma
linguagem, mas a maioria dos exemplos dados nas
referências são construídos em Java.
Existiu um costume de tentar limitar a ação do
PHP para apenas websites, e a cada versão nova
do PHP esta tentativa é cada vez mais destruída.
Nas versões oferecidas há tempo já existem todos
os recursos necessários para seguir os conceitos
do DDD.
PHP e OOP
Como não é novidade pra ninguém, o PHP está
melhorando cada vez mais seu suporte à
orientação à objetos (sem perder sua flexibilidade
de linguagem dinâmica e suporte a outros
paradigmas de programação).
Uma das alterações revolucionárias (por ter
movimentado demais a comunidade) é a inclusão
de namespaces (a partir da versão 5.3).
PHP e OOP
Em função das facilidades que o orientação à
objetos nos proporciona para ter uma
aproximação mais real do domínio (e
principalmente dos termos que ele traz –
linguagem onipresente), este é o paradigma ideal
para utilizarmos.
Algumas ferramentas que auxiliam...
Ferramentas disponíveis
Com a versão 5.3, também vieram grandes
ferramentas que nos ajudam muito no
desenvolvimento, principalmente:

●
    Doctrine 2 http://www.doctrine-project.org/
●
    Symfony 2 http://symfony.com/
Doctrine 2
O Doctrine 2 é um framework PHP que provê dois
grandes subprojetos: Doctrine DBAL (Database
abastraction layer) e Doctrine ORM.


Uma funcionalidade que ele proporciona é a
classe     DoctrineORMEntityRepository       que
possibilita a criação de repositórios customizados
(que se encaixam muito bem no conceito de
Repositórios do DDD).
Symfony 2
Full  stack   framework     organizado   em
componentes para as diversas necessidades de
uma aplicação, com destaque principal nos
componentes:

●
    Dependency Injection
●
    HTTP Foundation
Pequeno jabá =P
ActionMapper 2
Micro framework que utiliza componentes do
Symfony 2 e do Doctrine 2 para realizar as tarefas
de front-controller.
Facilita bastante a criação de aplicativos que
seguem DDD em função de não forçar a
organização do seu projeto.

Mais info: http://lcobucci.github.com/action-mapper/
Exemplo: http://conf.phpsc.com.br
         https://github.com/PHPSC/phpsc-conf
Conclusões
Os conceitos do Domain Driven Design oferecem
a possibilidade de modelarmos nosso software de
acordo com as regras de negócio do cliente,
buscando SEMPRE manter a mesma linguagem de
comunicação entre TODAS as pessoas envolvidas.
Para o PHP traz uma nova visão de como
estruturar as aplicações criadas, quebrando os
preconceitos existentes em torno da linguagem.
“Para tudo, mas principalmente na
análise das regras de negócio, lembre-se:
o que é implícito não é explícito”
Albert Einstein
Maiores informações
Obrigado!

Eu por aí: http://about.me/lcobucci
Slides: http://slideshare.net/lcobucci

Contenu connexe

Tendances

Padrões Web & Code Standard
Padrões Web & Code StandardPadrões Web & Code Standard
Padrões Web & Code StandardToni Albuquerque
 
Paradigmas de Programação
Paradigmas de ProgramaçãoParadigmas de Programação
Paradigmas de ProgramaçãoNatanael Simões
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesAdriano Teixeira de Souza
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Critérios de avaliação de linguagens
Critérios de avaliação de linguagensCritérios de avaliação de linguagens
Critérios de avaliação de linguagensPaulo Muniz
 
Paradigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - IntroduçãoParadigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - IntroduçãoAdriano Teixeira de Souza
 
Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíPriscila Mayumi
 
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor GomesDomain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor GomesiMasters
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaÁlvaro Farias Pinheiro
 
Crescendo profissionalmente com o apoio comunidade
Crescendo profissionalmente com o apoio comunidadeCrescendo profissionalmente com o apoio comunidade
Crescendo profissionalmente com o apoio comunidadeFelipe Nascimento
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
O papel e a carreira do arquiteto de software
O papel e a carreira do arquiteto de softwareO papel e a carreira do arquiteto de software
O papel e a carreira do arquiteto de softwareLeonardo Zanivan
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipseFilipe Bezerra Sousa
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven DesignÍtalo Bandeira
 

Tendances (20)

Padrões Web & Code Standard
Padrões Web & Code StandardPadrões Web & Code Standard
Padrões Web & Code Standard
 
Paradigmas de Programação
Paradigmas de ProgramaçãoParadigmas de Programação
Paradigmas de Programação
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - Classificações
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
01 aula1 habib
01 aula1 habib01 aula1 habib
01 aula1 habib
 
1.1.paradigmas
1.1.paradigmas1.1.paradigmas
1.1.paradigmas
 
Critérios de avaliação de linguagens
Critérios de avaliação de linguagensCritérios de avaliação de linguagens
Critérios de avaliação de linguagens
 
Paradigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - IntroduçãoParadigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - Introdução
 
Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aí
 
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor GomesDomain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Crescendo profissionalmente com o apoio comunidade
Crescendo profissionalmente com o apoio comunidadeCrescendo profissionalmente com o apoio comunidade
Crescendo profissionalmente com o apoio comunidade
 
Código limpo php
Código limpo phpCódigo limpo php
Código limpo php
 
Java com Excelência
Java com ExcelênciaJava com Excelência
Java com Excelência
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
O papel e a carreira do arquiteto de software
O papel e a carreira do arquiteto de softwareO papel e a carreira do arquiteto de software
O papel e a carreira do arquiteto de software
 
Teste Driven Development
Teste Driven DevelopmentTeste Driven Development
Teste Driven Development
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipse
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven Design
 
Paradigmas de Linguagem
Paradigmas de LinguagemParadigmas de Linguagem
Paradigmas de Linguagem
 

Similaire à DDD PHP Orientação Objetos

Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven DesignAndré Borgonovo
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) Grupo Treinar
 
Domain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem IntrodutóriaDomain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem Introdutóriaarmeniocardoso
 
Reutilização
ReutilizaçãoReutilização
Reutilizaçãoemjorge
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemassauloroos01
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoComunidade NetPonto
 
Fdd em uma casca de banana
Fdd em uma casca de bananaFdd em uma casca de banana
Fdd em uma casca de bananaejedelmal
 
Criando Framework - Conceitos, Estratégias e Dicas
Criando Framework - Conceitos, Estratégias e DicasCriando Framework - Conceitos, Estratégias e Dicas
Criando Framework - Conceitos, Estratégias e DicasNorton Guimarães
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento webArlindo Santos
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaGraziella Bonizi
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservicestdc-globalcode
 
Desenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software LivreDesenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software Livreelliando dias
 

Similaire à DDD PHP Orientação Objetos (20)

Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
DDD
DDDDDD
DDD
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
 
Domain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem IntrodutóriaDomain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem Introdutória
 
Reutilização
ReutilizaçãoReutilização
Reutilização
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Treinamento DDD .Net
Treinamento DDD .NetTreinamento DDD .Net
Treinamento DDD .Net
 
FDD
FDDFDD
FDD
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de Versão
 
Fdd em uma casca de banana
Fdd em uma casca de bananaFdd em uma casca de banana
Fdd em uma casca de banana
 
Criando Framework - Conceitos, Estratégias e Dicas
Criando Framework - Conceitos, Estratégias e DicasCriando Framework - Conceitos, Estratégias e Dicas
Criando Framework - Conceitos, Estratégias e Dicas
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento web
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquitetura
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
Desenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software LivreDesenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software Livre
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 

DDD PHP Orientação Objetos

  • 1. DDD e PHP Luís Otávio Cobucci Oblonczyk 25 de Agosto de 2012
  • 2. Luís Otávio Cobucci Oblonczyk ● Evangelista (doido por) PHP ● Desenvolvedor na Softnex Tecnologia (SC) ● Membro do PHPSC ● ZCE PHP 5.3 ● Perfeccionista ao extremo =P @lcobucci http://about.me/lcobucci
  • 3.
  • 7. mu Inúmeros exemplos ito Comunidade ativa Fácil aprendizado
  • 8. mu Inúmeros exemplos ito Comunidade ativa Diversas opções de frameworks para facilitar a Fácil aprendizado vida
  • 9. Aprendizado 100% prático, $$$ garantido!
  • 13. O que é DDD? “Domain-driven design (DDD) is an approach to developing software for complex needs by deeply connecting the implementation to an evolving model of the core business concepts. (...) Domain-driven design is not a technology or a methodology.” http://en.wikipedia.org/wiki/Domain-driven_design
  • 14. Definições básicas Domínio: área de conhecimento, influência ou atividade; Modelo: conjunto de abstrações que descrevem os aspectos de um domínio; Linguagem onipresente: linguagem estruturada com base no modelo e utilizada por todos os membros da equipe.
  • 16. Requisitos do DDD ● Domínio não é trivial ● A equipe tem conhecimento técnico e experiência em desenvolvimento com orientação à objetos (paradigma mais indicado) ● A equipe possui acesso ao analista de negócio ● O processo de desenvolvimento é iterativo
  • 17. Camadas de softwares Softwares podem ser divididos em várias camadas. Eric Evans diz que “a maior parte das arquiteturas bem-sucedidas são variações de quatro camadas conceituais”: ● Camada de apresentação (UI); ● Camada da aplicação; ● Camada do domínio; ● Camada da infra-estrutura
  • 18. Camada de apresentação “Responsável por mostrar informações e interpretar os comandos do usuário. Onde o agente externo pode ser outro sistema de computador em vez de um ser humano.”
  • 19. Camada da aplicação “Define as funções que o software deve executar e direciona os objetos expressivos do domínio para resolver os problemas.” “Ela não contém as regras ou o conhecimento do negócio, apenas coordena tarefas e delega trabalhos.”
  • 20. Camada do domínio “Responsável por representar conceitos do negócio, informações sobre a situação e as regras do negócio.” “Esta camada é o coração do software”
  • 21. Camada de infra-estrutura “Fornece recursos técnicos genéricos que suportam as camadas mais altas.” “A camada de infra-estrutura pode também suportar o padrão de interações entre as quatro camadas através de um framework arquitetural.”
  • 22. Tipos dos objetos O DDD divide o domínio em vários tipos de objetos diferentes, cada qual com sua responsabilidade definida.
  • 24. Entidades Objetos que possuem identificação única dentro do contexto em que ele se aplica, ou seja, para o domínio do software é fundamental que possua uma identidade (é único). Basicamente é o lar das regras de negócio de um software.
  • 26. Objetos de valor São objetos que participam das regras de negócio, entretanto são imutáveis e sua identidade não é relevante. De modo geral, eles apenas armazenam e transmitem valores.
  • 28. Serviços Centralizam e organizam as chamadas às operações das regras de negócio, ou seja, não possui o conhecimento sobre o funcionamento do software, porém realiza a ligação entre os objetos que conhecem. Basicamente são Façades.
  • 30. Agregados Grupos de objetos associados que são tratados de forma única. Os objetos são relacionados a uma raiz e delimitam um limite. A raiz é normalmente uma ENTIDADE e os objetos associados podem ser outras ENTIDADES ou OBJETOS DE VALOR. A raiz restringe o acesso externo aos objetos do limite, portanto possui a lógica necessária para o gerenciamento dos mesmos.
  • 32. Fábricas Tratam da construção dos objetos (normalmente entidades e objetos de valor), seu objetivo principal é simplificar a complexidade da criação dos objetos (e seus agregados). Podem ser objetos separados (builders) ou até métodos dentro da definição da class (factory methods).
  • 34. Repositórios Abstraem o acesso às camadas de persistência (pertencentes à camada de infra-estrutura). O objetivo principal é dar a impressão que é uma grande coleção de objetos, e que tudo está em memória.
  • 35. Repositórios Abstraem o acesso às camadas de persistência (pertencentes à camada de infra-estrutura). O objetivo principal é dar a impressão que é uma grande coleção de objetos, e que tudo está em memória. Repository != DAO
  • 36. Então tudo é conceitual? Exato! A questão principal é como nós organizamos o nosso software, e principalmente como nós lidamos com a nossa equipe e com os clientes. Lembrando sempre de manter a linguagem onipresente!
  • 37. Cadê o PHP no meio disso tudo?
  • 38. Domain Driven Design e PHP O DDD não restringe sua abordagem a nenhuma linguagem, mas a maioria dos exemplos dados nas referências são construídos em Java. Existiu um costume de tentar limitar a ação do PHP para apenas websites, e a cada versão nova do PHP esta tentativa é cada vez mais destruída. Nas versões oferecidas há tempo já existem todos os recursos necessários para seguir os conceitos do DDD.
  • 39. PHP e OOP Como não é novidade pra ninguém, o PHP está melhorando cada vez mais seu suporte à orientação à objetos (sem perder sua flexibilidade de linguagem dinâmica e suporte a outros paradigmas de programação). Uma das alterações revolucionárias (por ter movimentado demais a comunidade) é a inclusão de namespaces (a partir da versão 5.3).
  • 40. PHP e OOP Em função das facilidades que o orientação à objetos nos proporciona para ter uma aproximação mais real do domínio (e principalmente dos termos que ele traz – linguagem onipresente), este é o paradigma ideal para utilizarmos.
  • 41. Algumas ferramentas que auxiliam...
  • 42. Ferramentas disponíveis Com a versão 5.3, também vieram grandes ferramentas que nos ajudam muito no desenvolvimento, principalmente: ● Doctrine 2 http://www.doctrine-project.org/ ● Symfony 2 http://symfony.com/
  • 43. Doctrine 2 O Doctrine 2 é um framework PHP que provê dois grandes subprojetos: Doctrine DBAL (Database abastraction layer) e Doctrine ORM. Uma funcionalidade que ele proporciona é a classe DoctrineORMEntityRepository que possibilita a criação de repositórios customizados (que se encaixam muito bem no conceito de Repositórios do DDD).
  • 44. Symfony 2 Full stack framework organizado em componentes para as diversas necessidades de uma aplicação, com destaque principal nos componentes: ● Dependency Injection ● HTTP Foundation
  • 46. ActionMapper 2 Micro framework que utiliza componentes do Symfony 2 e do Doctrine 2 para realizar as tarefas de front-controller. Facilita bastante a criação de aplicativos que seguem DDD em função de não forçar a organização do seu projeto. Mais info: http://lcobucci.github.com/action-mapper/ Exemplo: http://conf.phpsc.com.br https://github.com/PHPSC/phpsc-conf
  • 47. Conclusões Os conceitos do Domain Driven Design oferecem a possibilidade de modelarmos nosso software de acordo com as regras de negócio do cliente, buscando SEMPRE manter a mesma linguagem de comunicação entre TODAS as pessoas envolvidas. Para o PHP traz uma nova visão de como estruturar as aplicações criadas, quebrando os preconceitos existentes em torno da linguagem.
  • 48. “Para tudo, mas principalmente na análise das regras de negócio, lembre-se: o que é implícito não é explícito” Albert Einstein
  • 50. Obrigado! Eu por aí: http://about.me/lcobucci Slides: http://slideshare.net/lcobucci