Componentes Transformers: Combinando o melhor de cada framework

Post on 13-Jul-2015

206 views 1 download

Transcript of Componentes Transformers: Combinando o melhor de cada framework

Componentes Transformers: combinando o melhor

de cada framework

Flávio Gomes da Silva Lisboa

www.fgsl.eti.br

http://phptranslationfestbrasil.github.io/

Quem sou eu?

● Chefe do setor de adequação do ExpressoV3 em Curitiba

Quem sou eu?

FISL LATINOWARE

Quem sou eu?

● Fui palestrante e instrutor em vários eventos

Quem sou eu?

● Leciono a disciplina Programação PHP Orientada a Objetos com Testes Unitários no curso de especialização em Desenvolvimento de Aplicações Web na UniCesumar.

Quem sou eu?

● Sou autor dos livros:

http://romocavaleirodoespaco.blogspot.com.br

Resumo

Nesta palestra iremos aprender como combinar componentes de diferentes frameworks dentro de uma mesma aplicação sem criar problemas de manutenção

Dúvida

Você vai falar sobre como combinar frameworks, enquanto tem um cara falando sobre um futuro sem frameworks?

Frameworks...

¡No más!

Esclarecimento

Não é porque algo parece não funcionar direito que você tem de desistir de usar.

Conselho

Seja o cara que sabe usar os recursos que tem.

Descrição

Inicialmente trataremos sobre padrões de construção de componentes, para então falar sobre interoperabilidade entre aplicações PHP e bibliotecas de componentes interoperáveis. Finalmente mostraremos exemplos de combinações de componentes de diferentes frameworks.

Preâmbulo

Tudo que falaremos aqui trata de manutenção de software. Se você vai fazer software pra ser jogado fora, não há aplicação para o que falaremos.

Preâmbulo

Mas se você vai fazer software que será mantido, atualizado, evoluído e aperfeiçoado, então deveria se preocupar com os tópicos que abordaremos.

Com que seu código parece?

Uso de componentes inadequados?

Com que seu código parece?

Não entendeu o design pattern Adapter?

Com que seu código parece?

Este pelo menos tem fraco acoplamento...

Código Emergencial

Precisamos fazer uma GRANDE

mudança IMEDIATAMENTE!

Preciso fazer um código que

funcione LOGO!

Cenário

Fatos:● Você precisa implementar rápido● Não dá tempo de aplicar a melhor solução● Não dá tempo de achar alguém que

implementou a melhor solução.● A equipe trabalha sobre o Princípio Scooby-

Doo.

Tartaglia Cardano

VOU FAZER DE QUALQUER JEITO

AGORA, DEPOIS EU MELHORO.

NUNCA VAI MELHORAR!

Padrões de Construção de Componentes

Você pode criar um componente incompleto.

Só precisa prepará-lo para crescer.

Padrões de Construção de Componentes

Pense no futuro!

Só precisa prepará-lo para crescer.

Padrões de Construção de Componentes

Hoje você não precisa traduzir sua aplicação.

Mas e amanhã?

Ninguém pediu ainda, então não posso perder tempo fazendo algo que não me pagaram pra fazer.

Você pode criar uma função ou método para tradução... que apenas devolva o que recebeu.

Isso evitará que no futuro você tenha de alterar dezenas (ou centenas) de arquivos para dar suporte à tradução.

Padrões de Construção de Componentes

Crie código extensível.

Permita que alguém conclua sua obra.

Interoperabilidade

Faça seu software conversar com outros.

Use protocolos de comunicação compreensíveis por outras aplicações, preferencialmente abertos.

No caso de PHP, faça com que seus componentes possam utilizar ou ser utilizados por outros componentes PHP facilmente.

Interoperabilidade

●Como encontrar classes●Como escrever código●Como tratar log

Interoperabilidade

Combinações de Componentes

Isto é um pleonasmo...

Componentes existem para serem combinados

Combinações de Componentes

Não basta ter as peças. Você precisa aprender a ser um Mestre Construtor.

Frameworks

Frameworks contém componentes.

Diferentes frameworks tem diferentes componentes para os mesmos propósitos.

É possível combinar componentes de frameworks diferentes, desde que eles sejam interoperáveis.

Componentes Desacoplados

DEVASTATOR

FRAMEWORK FULL STACK

DEVASTATOR

SUPERION

FRAMEWORK FULL STACK

FRAMEWORK FULL STACK

DEVASTATOR

SNARL SLAG

SLUDGE

GRIMLOCK

SWOOP

FRAMEWORK FULL STACK

MICROFRAMEWORK MICROFRAMEWORK

MICROFRAMEWORK

MICROFRAMEWORK

MICROFRAMEWORK

FrameworkitiesA Doença dos Frameworks

“Frameworkitis is the disease that a framework wants to do too much for you or it does it in a way that you don't want but you can't change it. It's fun to get all this functionality for free, but it hurts when the free functionality gets in the way. But you are now tied into the framework. To get the desired behavior you start to fight against the framework. And at this point you often start to lose, because it's difficult to bend the framework in a direction it didn't anticipate.”

Erich Gamma

http://www.artima.com/lejava/articles/reuseP.html

Cuidado ao entregar o controle!

MVC: O Ponto Crítico dos Frameworks

A implementação do architecture pattern MVC (Model View Controller) geralmente é a que tem o maior conjunto de acoplamentos.

MVC: O Ponto Crítico dos Frameworks

Ao optar por uma implementação MVC específica, estamos assinando um contrato com várias cláusulas de obrigação, para usufruir de benefícios oferecidos por ela.

MVC: O Ponto Crítico dos Frameworks

Procure uma implementação flexível, configurável, que permita injeção de dependências, para que você possa trocar implementações custosas por alternativas mais leves (ou ter a possibilidade de obliterar processos).

MVC: O Ponto Crítico dos Frameworks

A implementação MVC não pode ser um televisor que não funciona sem controle remoto!

MVC: O Ponto Crítico dos Frameworks

A implementação MVC deve permitir que você escolha os componentes que realmente precisa.

Ela deve ser capaz de não fazer nada além do necessário.

MVC: O Ponto Crítico dos Frameworks

● Cuidado com as unidades de reuso dos frameworks!

● Bundles e modules, por exemplo, são reusáveis diretamente apenas por seus respectivos gerenciadores (Symfony, Zend).

● Bibliotecas são mais reutilizáveis que estruturas modulares de implementações MVC!

Orquestre componentes!

Escolha o mais adequado para cada problema!

Use Composer para harmonizar dependências!

Use Composer para harmonizar dependências!

{ "require": { "monolog/monolog": "1.0.*" }}

Não crie laços!

CAMADAS DE SUA APLICAÇÃO

FRAMEWORK 1 FRAMEWORK 2 FRAMEWORK 3

Não crie laços!

CAMADAS DE SUA APLICAÇÃO

FRAMEWORK 1 FRAMEWORK 2 FRAMEWORK 3

X

Não crie laços!

CAMADAS DE SUA APLICAÇÃO

API CENTRAL DE SUA APLICAÇÃO

FRAMEWORK 1 FRAMEWORK 2 FRAMEWORK 3

Não crie laços!

CAMADAS DE SUA APLICAÇÃO

API CENTRAL DE SUA APLICAÇÃO

FRAMEWORK 1 FRAMEWORK 2 FRAMEWORK 3X

Não crie laços!

CAMADAS DE SUA APLICAÇÃO

API CENTRAL DE SUA APLICAÇÃO

FRAMEWORK 1 FRAMEWORK 2 FRAMEWORK 4

Perguntas?

www.fgsl.eti.br