DDD e PHP - TDC 2012
Upcoming SlideShare
Loading in...5
×
 

DDD e PHP - TDC 2012

on

  • 843 views

A análise e modelagem de software não é uma atividade simples, quando o domínio do software não é algo trivial e mais complicado ainda. O Domain Driven Design sugere uma nova abordagem para ...

A análise e modelagem de software não é uma atividade simples, quando o domínio do software não é algo trivial e mais complicado ainda. O Domain Driven Design sugere uma nova abordagem para resolver estas tarefas, criando uma linguagem única para todas as pessoas envolvidas no projeto.
Nesta palestra buscamos conhecer um pouco mais sobre essa abordagem e quais ferramentas temos para aplicá-la utilizando PHP.

Statistics

Views

Total Views
843
Views on SlideShare
839
Embed Views
4

Actions

Likes
1
Downloads
4
Comments
0

1 Embed 4

http://www.linkedin.com 4

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike 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

    DDD e PHP - TDC 2012 DDD e PHP - TDC 2012 Presentation Transcript

    • DDD e PHP Luís Otávio Cobucci Oblonczyk25 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 exemplosFácil aprendizado
    • Inúmeros exemplosComunidade ativa Fácil aprendizado
    • mu Inúmeros exemplos itoComunidade ativa Fácil aprendizado
    • mu Inúmeros exemplos ito Comunidade ativaDiversas opçõesde frameworkspara facilitar a Fácil aprendizadovida
    • Aprendizado 100% prático, $$$ garantido!
    • Será?
    • Conceito ou (infra)estrutura?
    • Possíveis resultados...
    • O que é DDD?“Domain-driven design (DDD) is an approach todeveloping software for complex needs by deeplyconnecting the implementation to an evolvingmodel of the core business concepts.(...)Domain-driven design is not a technology or amethodology.”http://en.wikipedia.org/wiki/Domain-driven_design
    • Definições básicasDomínio: área de conhecimento, influência ouatividade;Modelo: conjunto de abstrações que descrevemos aspectos de um domínio;Linguagem onipresente: linguagem estruturadacom base no modelo e utilizada por todos osmembros da equipe.
    • Linguagem onipresenteevita 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 softwaresSoftwares podem ser divididos em váriascamadas. Eric Evans diz que “a maior parte dasarquiteturas bem-sucedidas são variações dequatro 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 einterpretar os comandos do usuário.Onde o agente externo pode ser outro sistema decomputador em vez de um ser humano.”
    • Camada da aplicação“Define as funções que o software deve executare direciona os objetos expressivos do domíniopara resolver os problemas.”“Ela não contém as regras ou o conhecimento donegócio, apenas coordena tarefas e delegatrabalhos.”
    • Camada do domínio“Responsável por representar conceitos donegócio, informações sobre a situação e as regrasdo negócio.”“Esta camada é o coração do software”
    • Camada de infra-estrutura“Fornece recursos técnicos genéricos quesuportam as camadas mais altas.”“A camada de infra-estrutura pode tambémsuportar o padrão de interações entre as quatrocamadas através de um framework arquitetural.”
    • Tipos dos objetosO DDD divide o domínio em vários tipos deobjetos diferentes, cada qual com suaresponsabilidade definida.
    • Entidades
    • EntidadesObjetos que possuem identificação única dentrodo contexto em que ele se aplica, ou seja, para odomínio do software é fundamental que possuauma identidade (é único). Basicamente é o lar dasregras de negócio de um software.
    • Objetos de valor
    • Objetos de valorSão objetos que participam das regras de negócio,entretanto são imutáveis e sua identidade não érelevante. De modo geral, eles apenasarmazenam e transmitem valores.
    • Serviços
    • ServiçosCentralizam e organizam as chamadas àsoperações das regras de negócio, ou seja, nãopossui o conhecimento sobre o funcionamento dosoftware, porém realiza a ligação entre os objetosque conhecem. Basicamente são Façades.
    • Agregados
    • AgregadosGrupos de objetos associados que são tratados deforma única. Os objetos são relacionados a umaraiz e delimitam um limite. A raiz é normalmenteuma ENTIDADE e os objetos associados podemser outras ENTIDADES ou OBJETOS DE VALOR.A raiz restringe o acesso externo aos objetos dolimite, portanto possui a lógica necessária para ogerenciamento dos mesmos.
    • Fábricas
    • FábricasTratam da construção dos objetos (normalmenteentidades e objetos de valor), seu objetivoprincipal é simplificar a complexidade da criaçãodos objetos (e seus agregados).Podem ser objetos separados (builders) ou atémétodos dentro da definição da class (factorymethods).
    • Repositórios
    • RepositóriosAbstraem o acesso às camadas de persistência(pertencentes à camada de infra-estrutura).O objetivo principal é dar a impressão que é umagrande coleção de objetos, e que tudo está emmemória.
    • RepositóriosAbstraem o acesso às camadas de persistência(pertencentes à camada de infra-estrutura).O objetivo principal é dar a impressão que é umagrande coleção de objetos, e que tudo está emmemória. Repository != DAO
    • Então tudo é conceitual?Exato!A questão principal é como nós organizamos onosso software, e principalmente como nóslidamos com a nossa equipe e com os clientes.Lembrando sempre de manter a linguagemonipresente!
    • Cadê o PHP no meio disso tudo?
    • Domain Driven Design e PHPO DDD não restringe sua abordagem a nenhumalinguagem, mas a maioria dos exemplos dados nasreferências são construídos em Java.Existiu um costume de tentar limitar a ação doPHP para apenas websites, e a cada versão novado PHP esta tentativa é cada vez mais destruída.Nas versões oferecidas há tempo já existem todosos recursos necessários para seguir os conceitosdo DDD.
    • PHP e OOPComo não é novidade pra ninguém, o PHP estámelhorando cada vez mais seu suporte àorientação à objetos (sem perder sua flexibilidadede linguagem dinâmica e suporte a outrosparadigmas de programação).Uma das alterações revolucionárias (por termovimentado demais a comunidade) é a inclusãode namespaces (a partir da versão 5.3).
    • PHP e OOPEm função das facilidades que o orientação àobjetos nos proporciona para ter umaaproximação mais real do domínio (eprincipalmente dos termos que ele traz –linguagem onipresente), este é o paradigma idealpara utilizarmos.
    • Algumas ferramentas que auxiliam...
    • Ferramentas disponíveisCom a versão 5.3, também vieram grandesferramentas que nos ajudam muito nodesenvolvimento, principalmente:● Doctrine 2 http://www.doctrine-project.org/● Symfony 2 http://symfony.com/
    • Doctrine 2O Doctrine 2 é um framework PHP que provê doisgrandes subprojetos: Doctrine DBAL (Databaseabastraction layer) e Doctrine ORM.Uma funcionalidade que ele proporciona é aclasse DoctrineORMEntityRepository quepossibilita a criação de repositórios customizados(que se encaixam muito bem no conceito deRepositórios do DDD).
    • Symfony 2Full stack framework organizado emcomponentes para as diversas necessidades deuma aplicação, com destaque principal noscomponentes:● Dependency Injection● HTTP Foundation
    • Pequeno jabá =P
    • ActionMapper 2Micro framework que utiliza componentes doSymfony 2 e do Doctrine 2 para realizar as tarefasde front-controller.Facilita bastante a criação de aplicativos queseguem DDD em função de não forçar aorganizaçã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õesOs conceitos do Domain Driven Design oferecema possibilidade de modelarmos nosso software deacordo com as regras de negócio do cliente,buscando SEMPRE manter a mesma linguagem decomunicação entre TODAS as pessoas envolvidas.Para o PHP traz uma nova visão de comoestruturar as aplicações criadas, quebrando ospreconceitos existentes em torno da linguagem.
    • “Para tudo, mas principalmente naaná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/lcobucciSlides: http://slideshare.net/lcobucci