Your SlideShare is downloading. ×
0
Flávio Gomes da Silva Lisboa www.fgsl.eti.br @fgsl
Quem sou eu  AutorArquiteto e Desenvolvedor                                                            Certificado        ...
ConsultorLivre reprodução, desde que citada a fonte. www.fgsl.eti.br @fgsl
ConsultorLivre reprodução, desde que citada a fonte. www.fgsl.eti.br @fgsl
ConsultorLivre reprodução, desde que citada a fonte. www.fgsl.eti.br @fgsl
Especialista em história em       quadrinhos http://perse.doneit.com.br  romocavaleirodoespaco.blogspot.com   Livre reprod...
Arquitetura de Software   Arquitetura é a essência da estrutura: é a forma       A estrutura ofusca a forma   Arquitetu...
Lean Architecture“Arquitetura Enxuta”
Lean Architecture          “Arquitetura Enxuta”   O “Pensamento Enxuto” (Lean Thinking),    surgiu no final dos anos 80 d...
Lean Architecture          “Arquitetura Enxuta”   O “Pensamento Enxuto” é uma estratégia de    negócios para aumentar a s...
Qual o valor da arquitetura?   A arquitetura suporta “o que acontece lá”.   Código habitável – pelas pessoas que    dese...
Arquitetura e            Orientação a Objetos   Orientação a Objetos (OO) é um paradigma –    um modo de falar sobre a fo...
MVC       O que é isso?Algum mnemômico para Twitter?
Model View Controller        View     Controller       Model
Model View Controller           Controller View                   Model
Projeto MVC
Projeto MVC<?phpnamespace MvcModel;abstract class Model{}                       <?php                       namespace MvcV...
Não ficou claro...   Então vamos recorrer às analogias.
Modelo
Visão
Controlador
Capitão   Marvel
Capitão   Marvel
Remember, remember...   Um mesmo nome identifica duas entidades    distintas.   O nome por si só, não tem nenhum signifi...
Contexto
MVC é a encarnação da visão OO   O modelo mental do usuário é introduzido no    código.   O objetivo das visões é a mani...
Como nasceu o MVCO cientista norueguêsTrygve Reenskaug estavadesencantado com aarquitetura das linguagensSimula e Smalltal...
MVCU?Mas onde foi parar o U?
Os objetivos do MVCU   Deixar que os usuários interagissem    diretamente com o código que foi projetado    como uma refl...
Mas arquitetura é mais do que isso   A forma do domínio de negócio        O que o sistema é.        Modelo de Domínio (...
Análise e Modelagem de Papéis           Orientada a Objetos   Precursora da UML                              Caso        ...
Análise e Modelagem de Papéis      Orientada a Objetos<?phpnamespace ArquiteturaOORAM;class Papel{     public function res...
De volta a OO: Outras formas na    cabeça do usuário final   Usuários pensam mais sobre os papéis    manipulados por obje...
Ainda mais formas!   E o algoritmo?   O algoritmo também tem forma na cabeça do    usuário.       Inicia a transação.  ...
De volta a OO: Outras formas na    cabeça do usuário final   O usuário está mais preocupado com as    responsabilidades q...
Operações de Sistema:          Separação de Interesses   Computadores podem:       Armazenar e recuperar dados       Tr...
Operações de Sistema:          Separação de Interesses    Execução de tarefas em um sistema               Mensagem    Con...
Operações de Sistema:       Executadas por Contexto   Execução de tarefas em um sistema              <?php              c...
Operações de Sistema:        Executadas por Contexto   Execução de tarefas em um sistema      public function executarAti...
Operações de Sistema:       Executadas por Contexto   Execução de tarefas em um sistema
Operações de Sistema:       Executadas por Contexto   Execução de tarefas em um sistema
Operações de Sistema:        Executadas por Contextos   Um Contexto (uma instância de uma classe de    contexto).       ...
Essas formas trazem uma nova                              arquitetura                      Papéis repletos de métodos (res...
Essas formas trazem uma nova          arquiteturaA proposta de Trygve para uma nova arquiteturaé suportar a visão do usuár...
Essas formas trazem uma nova          arquiteturaUma das formas maioreis dessa arquitetura,chamada      forma      (ou    ...
Essas formas trazem uma nova           arquitetura<?phpinterface Compromisso{public function cumprir();}                  ...
Essas formas trazem uma nova          arquiteturaO que Trygve adiciona são os papéis commétodos. Esses papéis podem invoca...
Papéis com MétodosEsses papéis são implementados como classes.Cada papel com métodos é injetado dentro deuma classe cujos ...
Casos de UsoCada cenário de caso de uso é implementadocomo uma interação de algoritmos entrepapéis.Isso é um tipo de decom...
Composição de ClassesPrecisamos compor algoritmos genéricos (penseem trechos de código), de papéis com métodoscom as class...
Composição de ClassesUm objeto pode ter papéis variáveis de acordocom o contexto em que está operando.Um objeto pode adqui...
Palavras-chave  Herança, Reuso, Lean      ArchictetureDependência, Composição,       Contexto
Palavras-chave Acoplamento       XDesacoplamento
É hora de conhecer DCI   O que é isso? Um mnemônico para mensagens    instantâneas?   “DCI pra gente tomar um café!”
Data Context Interaction      Interaction        Context         Data
Data Context Interaction                Context  Interaction                          Data
Projeto DCI<?phpnamespace DciData;abstract class Data{}                      <?php                      namespace DciInter...
Data Context InteractionQuando estudamos um negócio, também devemos ter esse tipode preocupação. Separamos a Visão da Estr...
Dados
Contexto
Interação
Como nasceu o DCI?   Podemos considerar a publicação do artigo    “The DCI Architecture: A New Vision of Object-    Orien...
Solução para os problemas de            composição Traits Injeção de dependências
Traits   Traits: Composing Classes from Behavioral    Building Blocks   Dissertação de Nathanael Scharli.   Apresentada...
PHP >= 5.4trait [nome] {[bloco de código]}class [nome] extends [nome] {    use [nome];}
Injeção de dependênciasnamespace TomarreHelper;class Url{public function __construct(Request$request)                     ...
Injeção de dependênciasuse ZendDiDefinition,ZendDiReference;$mongo = new Definition(Mongo);$mongoDB = new Definition(Mongo...
Ou seja... Muita gente fala de MVC, mas  poucos o implementam direito.  Exemplo disso é a proliferação  de modelos magros...
Obrigado!  Flávio Gomes da Silva Lisboa                 www.fgsl.eti.br        flavio.lisboa@fgsl.eti.brLivre reprodução, ...
Upcoming SlideShare
Loading in...5
×

DCI com PHP

2,485

Published on

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

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,485
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
30
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×