Download pdf - DDD e PHP - TDC 2012

Transcript
Page 1: DDD e PHP - TDC 2012

DDD e PHPDDD e PHP

Luís Otávio Cobucci Oblonczyk

25 de Agosto de 2012

Page 2: DDD e PHP - TDC 2012

Luís Otávio Cobucci OblonczykLuí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

Page 3: DDD e PHP - TDC 2012
Page 4: DDD e PHP - TDC 2012

Fácil aprendizado

Page 5: DDD e PHP - TDC 2012

Fácil aprendizado

Inúmeros exemplos

Page 6: DDD e PHP - TDC 2012

Fácil aprendizado

Inúmeros exemplos

Comunidade ativa

Page 7: DDD e PHP - TDC 2012

Fácil aprendizado

Inúmeros exemplos

Comunidade ativamuito

Page 8: DDD e PHP - TDC 2012

Fácil aprendizado

Inúmeros exemplos

Comunidade ativa

Diversas opçõesde frameworkspara facilitar a vida

muito

Page 9: DDD e PHP - TDC 2012

Aprendizado 100% prático, $$$ garantido!

Page 10: DDD e PHP - TDC 2012

Será?

Page 11: DDD e PHP - TDC 2012

Conceito ou (infra)estrutura?

Page 12: DDD e PHP - TDC 2012

Possíveis resultados...

Page 13: DDD e PHP - TDC 2012

O que é DDD?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

Page 14: DDD e PHP - TDC 2012

Definições básicasDefiniçõ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.

Page 15: DDD e PHP - TDC 2012

Linguagem onipresenteevita desentendimentos.

Page 16: DDD e PHP - TDC 2012

Requisitos do DDDRequisitos 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

Page 17: DDD e PHP - TDC 2012

Camadas de softwaresCamadas 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

Page 18: DDD e PHP - TDC 2012

Camada de apresentaçãoCamada 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.”

Page 19: DDD e PHP - TDC 2012

Camada da aplicaçãoCamada 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.”

Page 20: DDD e PHP - TDC 2012

Camada do domínioCamada 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”

Page 21: DDD e PHP - TDC 2012

Camada de infra-estruturaCamada 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.”

Page 22: DDD e PHP - TDC 2012

Tipos dos objetosTipos dos objetos

O DDD divide o domínio em vários tipos de objetos diferentes, cada qual com sua responsabilidade definida.

Page 23: DDD e PHP - TDC 2012

Entidades

Page 24: DDD e PHP - TDC 2012

EntidadesEntidades

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.

Page 25: DDD e PHP - TDC 2012

Objetos de valor

Page 26: DDD e PHP - TDC 2012

Objetos de valorObjetos 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.

Page 27: DDD e PHP - TDC 2012

Serviços

Page 28: DDD e PHP - TDC 2012

ServiçosServiç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.

Page 29: DDD e PHP - TDC 2012

Agregados

Page 30: DDD e PHP - TDC 2012

AgregadosAgregados

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.

Page 31: DDD e PHP - TDC 2012

Fábricas

Page 32: DDD e PHP - TDC 2012

FábricasFá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).

Page 33: DDD e PHP - TDC 2012

Repositórios

Page 34: DDD e PHP - TDC 2012

RepositóriosRepositó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.

Page 35: DDD e PHP - TDC 2012

RepositóriosRepositó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

Page 36: DDD e PHP - TDC 2012

Então tudo é conceitual?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!

Page 37: DDD e PHP - TDC 2012

Cadê o PHP no meio disso tudo?

Page 38: DDD e PHP - TDC 2012

Domain Driven Design e PHPDomain 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.

Page 39: DDD e PHP - TDC 2012

PHP e OOPPHP 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).

Page 40: DDD e PHP - TDC 2012

PHP e OOPPHP 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.

Page 41: DDD e PHP - TDC 2012

Algumas ferramentas que auxiliam...

Page 42: DDD e PHP - TDC 2012

Ferramentas disponíveisFerramentas 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/

Page 43: DDD e PHP - TDC 2012

Doctrine 2Doctrine 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 Doctrine\ORM\EntityRepository que possibilita a criação de repositórios customizados (que se encaixam muito bem no conceito de Repositórios do DDD).

Page 44: DDD e PHP - TDC 2012

Symfony 2Symfony 2

Full stack framework organizado em componentes para as diversas necessidades de uma aplicação, com destaque principal nos componentes:

● Dependency Injection● HTTP Foundation

Page 45: DDD e PHP - TDC 2012

Pequeno jabá =P

Page 46: DDD e PHP - TDC 2012

ActionMapper 2ActionMapper 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

Page 47: DDD e PHP - TDC 2012

ConclusõesConclusõ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.

Page 48: DDD e PHP - TDC 2012

“Para tudo, mas principalmente naanálise das regras de negócio, lembre-se:o que é implícito não é explícito”Albert Einstein

Page 49: DDD e PHP - TDC 2012

Maiores informaçõesMaiores informações

Page 50: DDD e PHP - TDC 2012

Obrigado!Obrigado!

Eu por aí: http://about.me/lcobucci

Slides: http://slideshare.net/lcobucci