DCI com PHP

2.762 visualizações

Publicada em

Palestra sobre os conceitos de DCI (Data Context Interaction) aplicados em PHP.

Publicada em: Tecnologia
0 comentários
4 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
2.762
No SlideShare
0
A partir de incorporações
0
Número de incorporações
10
Ações
Compartilhamentos
0
Downloads
31
Comentários
0
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

DCI com PHP

  1. 1. Flávio Gomes da Silva Lisboa www.fgsl.eti.br @fgsl
  2. 2. Quem sou eu AutorArquiteto e Desenvolvedor Certificado Instrutor Livre reprodução, desde que citada a fonte. www.fgsl.eti.br @fgsl
  3. 3. ConsultorLivre reprodução, desde que citada a fonte. www.fgsl.eti.br @fgsl
  4. 4. ConsultorLivre reprodução, desde que citada a fonte. www.fgsl.eti.br @fgsl
  5. 5. ConsultorLivre reprodução, desde que citada a fonte. www.fgsl.eti.br @fgsl
  6. 6. Especialista em história em quadrinhos http://perse.doneit.com.br romocavaleirodoespaco.blogspot.com Livre reprodução, desde que citada a fonte. www.fgsl.eti.br @fgsl
  7. 7. Arquitetura de Software Arquitetura é a essência da estrutura: é a forma  A estrutura ofusca a forma Arquitetura Enxuta: entrega sob demanda de funcionalidades, o que realmente gera valor. Arquitetura Ágil: a que suporta mudança, interação com o usuário final, descoberta e fácil compreensão (de funcionalidades)
  8. 8. Lean Architecture“Arquitetura Enxuta”
  9. 9. Lean Architecture “Arquitetura Enxuta” O “Pensamento Enxuto” (Lean Thinking), surgiu no final dos anos 80 do século XX, em um projeto do MIT sobre a indústria automobilística mundial. A pesquisa mostrou que a Toyota havia desenvolvido um novo paradigma de gestão nas principais dimensões dos negócios. Em 2009, a Toyota tornou-se a maior em volume de vendas, mostrando as vantagens e benefícios do sistema que desenvolveu.
  10. 10. Lean Architecture “Arquitetura Enxuta” O “Pensamento Enxuto” é uma estratégia de negócios para aumentar a satisfação dos clientes através da melhor utilização dos recursos. O foco da implementaçao deve estar nas reais necessidades dos negócios.
  11. 11. Qual o valor da arquitetura? A arquitetura suporta “o que acontece lá”. Código habitável – pelas pessoas que desenvolvem e pelas pessoas que o usam. A arquitetura é o que faz o código parecer familiar. Uma boa arquitetura reduz lixo e inconsistência  Menos retrabalho  Consistência do sistema
  12. 12. Arquitetura e Orientação a Objetos Orientação a Objetos (OO) é um paradigma – um modo de falar sobre a forma. Fundamentos de OO: capturar o modelo mental do usuário final no código. OO captura  As entidades (objetos) que os usuários conhecem  As classes que servem como conjuntos de tais objetos.
  13. 13. MVC O que é isso?Algum mnemômico para Twitter?
  14. 14. Model View Controller View Controller Model
  15. 15. Model View Controller Controller View Model
  16. 16. Projeto MVC
  17. 17. Projeto MVC<?phpnamespace MvcModel;abstract class Model{} <?php namespace MvcView; abstract class View { } <?php namespace MvcController; abstract class Controller { }
  18. 18. Não ficou claro... Então vamos recorrer às analogias.
  19. 19. Modelo
  20. 20. Visão
  21. 21. Controlador
  22. 22. Capitão Marvel
  23. 23. Capitão Marvel
  24. 24. Remember, remember... Um mesmo nome identifica duas entidades distintas. O nome por si só, não tem nenhum significado. O nome é apenas um dado. Mas o dado, dentro de um contexto, traz informação para o receptor.
  25. 25. Contexto
  26. 26. MVC é a encarnação da visão OO O modelo mental do usuário é introduzido no código. O objetivo das visões é a manipulação direta – a interação com o usuário. O objetivo do controlador é coordenar múltiplas visões. Os dados do modelo podem ser apresentados de várias formas.
  27. 27. Como nasceu o MVCO cientista norueguêsTrygve Reenskaug estavadesencantado com aarquitetura das linguagensSimula e Smalltalk.Em 1978, ele apresentouum padrão de projetochamado Model-View-Controller-User.
  28. 28. MVCU?Mas onde foi parar o U?
  29. 29. Os objetivos do MVCU Deixar que os usuários interagissem diretamente com o código que foi projetado como uma reflexão de seus próprios modelos mentais. É pra isso que serve a visão. Permitir que o usuário coordene várias visões simultâneas do mesmo modelo. É pra isso que serve o controlador. Isso é baseado na hipótese de que basta modelar a noção que o usuário final tem sobre o sistema de objetos.
  30. 30. Mas arquitetura é mais do que isso A forma do domínio de negócio  O que o sistema é.  Modelo de Domínio (como no MVC).  Com o que o programador se preocupa. A forma das interações do sistema  O que o sistema faz.  Modelos de papéis: OORAM (Object Oriented Role Analysis and Modeling).  Com o que o usuário se preocupa.
  31. 31. Análise e Modelagem de Papéis Orientada a Objetos Precursora da UML Caso de Uso Papel Responsabilidade
  32. 32. Análise e Modelagem de Papéis Orientada a Objetos<?phpnamespace ArquiteturaOORAM;class Papel{ public function responsabilidade() { }}
  33. 33. De volta a OO: Outras formas na cabeça do usuário final Usuários pensam mais sobre os papéis manipulados por objetos do que nos objetos.  O que o sistema faz, novamente!  Dinheiro transferido de uma conta bancária: os papéis são a conta de origem e a conta de destino.  Os objetos poupança, conta de investimento podem todos fazer uso desses papéis. As associações de papéis para objetos, para um dado caso de uso, também é parte do modelo do usuário final.
  34. 34. Ainda mais formas! E o algoritmo? O algoritmo também tem forma na cabeça do usuário.  Inicia a transação.  Debita a conta de origem.  Credita a conta de destino.  Finaliza a transação.
  35. 35. De volta a OO: Outras formas na cabeça do usuário final O usuário está mais preocupado com as responsabilidades que são carregadas no sistema. A orientação a objetos tem servido aos programadores (o processo de descoberta, a arquitetura) mas não aos usuários e clientes – e muito menos à qualidade do software.
  36. 36. Operações de Sistema: Separação de Interesses Computadores podem:  Armazenar e recuperar dados  Transformar dados  Comunicarem-se!!! A comunicação torna-se cidadã de primeira classe na computação. Programação orientada a classes: noodles DCI: Separação de interesses:  Cada tarefa codificada separadamente.
  37. 37. Operações de Sistema: Separação de Interesses Execução de tarefas em um sistema Mensagem Contexto Operação
  38. 38. Operações de Sistema: Executadas por Contexto Execução de tarefas em um sistema <?php class Context { }
  39. 39. Operações de Sistema: Executadas por Contexto Execução de tarefas em um sistema public function executarAtividade1() { $this->outroContexto->executarAtividade2(); }
  40. 40. Operações de Sistema: Executadas por Contexto Execução de tarefas em um sistema
  41. 41. Operações de Sistema: Executadas por Contexto Execução de tarefas em um sistema
  42. 42. Operações de Sistema: Executadas por Contextos Um Contexto (uma instância de uma classe de contexto).  Recebe uma mensagem.  É responsável por uma operação de sistema.  Dispara um método no primeiro papel.  A execução continua como especificado nos métodos do papel.
  43. 43. Essas formas trazem uma nova arquitetura Papéis repletos de métodos (responsabilidades) Casos de UsoClasses de Domínio papéis sem Métodos Identificadores e c c
  44. 44. Essas formas trazem uma nova arquiteturaA proposta de Trygve para uma nova arquiteturaé suportar a visão do usuário dos casos de usoe localizar algoritmos em um papelencapsulado.
  45. 45. Essas formas trazem uma nova arquiteturaUma das formas maioreis dessa arquitetura,chamada forma (ou arquitetura),comportamental) básica, definida apenas emtermos de protocolos de papéis. Esses são ospapéis sem métodos. Compromissos. Contratos. Responsabilidades.
  46. 46. Essas formas trazem uma nova arquitetura<?phpinterface Compromisso{public function cumprir();} <?php interface Contrato { public function respeitar(); } <?php interface Responsabilidade { public function ter(); }
  47. 47. Essas formas trazem uma nova arquiteturaO que Trygve adiciona são os papéis commétodos. Esses papéis podem invocar métodospróprios ou de outro papel.
  48. 48. Papéis com MétodosEsses papéis são implementados como classes.Cada papel com métodos é injetado dentro deuma classe cujos objetos manipulam aquelepapel em algum momento de seu tempo de vida.A injeção é um tipo de operação de “colagem”,onde a lógica dos papéis com métodos éadicionada à lógica das classes.Cada classe se comportará de acordo com osmétodos dos papéis que foram “copiados” paradentro dele.
  49. 49. Casos de UsoCada cenário de caso de uso é implementadocomo uma interação de algoritmos entrepapéis.Isso é um tipo de decomposição funcional, poismuitos usuários decompõem tarefas complexasem subtarefas.Em tempo de execução, associamos um papelsem métodos com um objeto que pode suportaros contratos, compromissos, daquele papel edeixamos o cenário ocorrer.
  50. 50. Composição de ClassesPrecisamos compor algoritmos genéricos (penseem trechos de código), de papéis com métodoscom as classes cujos objetos manipulam essespapéis.Estamos falando de colar pedaços de código, enão classes inteiras.Entramos em um problema que não é resolvidopela mecanismo fundamental de reuso daorientação a objetos, a herança.
  51. 51. Composição de ClassesUm objeto pode ter papéis variáveis de acordocom o contexto em que está operando.Um objeto pode adquirir responsabilidades emtempo de execução.Como atribuir poderes para um objeto que nãoforam definidos previamente?Como estabelecer a dependência entre objetosem tempo de execução?
  52. 52. Palavras-chave Herança, Reuso, Lean ArchictetureDependência, Composição, Contexto
  53. 53. Palavras-chave Acoplamento XDesacoplamento
  54. 54. É hora de conhecer DCI O que é isso? Um mnemônico para mensagens instantâneas? “DCI pra gente tomar um café!”
  55. 55. Data Context Interaction Interaction Context Data
  56. 56. Data Context Interaction Context Interaction Data
  57. 57. Projeto DCI<?phpnamespace DciData;abstract class Data{} <?php namespace DciInteraction; abstract class Interaction { } <?php namespace DciContext; abstract class Context { }
  58. 58. Data Context InteractionQuando estudamos um negócio, também devemos ter esse tipode preocupação. Separamos a Visão da Estrutura da Visão dosProcessos, cientes da maior complexidade e volatilidade dasegunda. Costumo dizer em meus treinamentos que a Visão dosProcessos ocupará, no mínimo, 70% do tempo de um analistade negócios. Acontece que a aplicação tradicional ouindisciplinada de conceitos OO, em determinado momento,mistura tudo. Através do padrão DCI essa separação é semprerespeitada. Entre a estrutura (Data, o D de DCI) e o-que-o-sistema-FAZ (Interaction), sempre há um Contexto. E um Contextoé uma representação fiel de… um Caso de Uso!Paulo Vasconcelos, Finito Consultoria
  59. 59. Dados
  60. 60. Contexto
  61. 61. Interação
  62. 62. Como nasceu o DCI? Podemos considerar a publicação do artigo “The DCI Architecture: A New Vision of Object- Oriented Programming”, de James OCoplien e … Trygve Reenskaug, em 2009 The Brave and The Bold
  63. 63. Solução para os problemas de composição Traits Injeção de dependências
  64. 64. Traits Traits: Composing Classes from Behavioral Building Blocks Dissertação de Nathanael Scharli. Apresentada na Philosophisch- naturwissenschaftlichen Fakultat der Universitat Bern em 2005. Um simples modelo composicional que estende a herança simples.
  65. 65. PHP >= 5.4trait [nome] {[bloco de código]}class [nome] extends [nome] { use [nome];}
  66. 66. Injeção de dependênciasnamespace TomarreHelper;class Url{public function __construct(Request$request) c{$this->request = $request;}public function setRouter(Router $router){$this->router = $router;}}
  67. 67. Injeção de dependênciasuse ZendDiDefinition,ZendDiReference;$mongo = new Definition(Mongo);$mongoDB = new Definition(MongoDB);$mongoDB->setParam(conn, newReference(mongo)) ->setParam(name, test);$coll = new Definition(MongoCollection);$coll->setParam(db, new Reference(mongodb)) ->setParam(name, resource);$di->setDefinitions(array( mongo=> $mongo, mongodb => $mongoDB, resource => $coll,)); 2$resource = $di->get(resource);
  68. 68. Ou seja... Muita gente fala de MVC, mas poucos o implementam direito. Exemplo disso é a proliferação de modelos magros e controladores gordos. DCI não substitui MVC, apenas o complementa.
  69. 69. Obrigado! Flávio Gomes da Silva Lisboa www.fgsl.eti.br flavio.lisboa@fgsl.eti.brLivre reprodução, desde que citada a fonte. www.fgsl.eti.br @fgsl

×