SlideShare uma empresa Scribd logo
1 de 28
Globalcode – Open4education
Arquitetura Java
Design patterns e Tecnologias para Modularização em Java
@filipeportes
Globalcode – Open4education
Mim tarzan...
Graduado em Ciência da Computação
Um dos Coordenadores do Grupo de Usuários
Java de Goiás - @gojava
Mais de 7 anos de experiência com
desenvolvimento e arquitetura Java Web
Atualmente trabalha para a Cast Tecnologia em
Brasília – DF
Sósia oficial do Brad Pitt
Globalcode – Open4education
Globalcode – Open4education
Globalcode – Open4education
Modularização
Definindo um módulo:
“A Software Module is a deployable, manageable,
natively reusable, composable, stateless unit of
software that provides a concise interface to
consumers”
Instalável
Gerenciável
Reutilizável
Combinável
Não guarda estado
Oferece uma Interface clara
Fonte: Java Application Architecture: Modularity Patterns with Examples Using OSGi
Globalcode – Open4education
Facetas da Modularização
Modelo de Desenvolvimento
Formas de construir arquiteturas modulares, e tratar os
problemas comuns nesse cenário.
Design Patterns
Modelo de Execução
Foca em como gerenciador sistemas modulares em
tempo de execução, ou seja, Plataformas que suportem
um Eco-sistema Modular oferecendo recursos que
facilitem e potencializem a modularização
OSGi, jigsaw, php synfony, CDI Extensions, etc...
Globalcode – Open4education
Uso vs Reuso
Quanto maior a granularidade,
menos dependências, mais fácil de
usar e mais difícil de reutilizar.
Quanto menor a granularidade, mais
dependências, mais fácil de reutilizar
e mais difícil de usar.
Globalcode – Open4education
Design em camadas
Design comum encontrado em diversos sistemas, nas camadas
superiores observa-se uma granularidade maior, ou seja, entidades
mais fácil de se usar, a medida que se desce para as camadas
inferiores a granularidade diminui, ou seja, entidades menores e mais
fáceis de reutilizar.
Globalcode – Open4education
Design Modular
Globalcode – Open4education
Patterns Modularização
http://www.amazon.com/Java-Application-Architecture-Modularity-Patterns/dp/0321247132
Excelente Livro sobre Modularização
de Software e Design Patterns com
exemplos práticos em Java e OSGI
“Esse livro non Ecxsisssteee” – Padre Quevedo
sobre esse livro
“Meu Precioooossooo” – Gollum sobre esse Livro
“Aiiii que Linnndo, Aiiiii que Luuuxo, Maara, que D+
+, Liiindoo” – Narcisa sobre esse livro
“Aaaahôôôoo trem que pula” – típico goiâno sobre
esse livro
Globalcode – Open4education
Principais Patterns
18 patterns descritos no padrão GOF
Base Patterns
Manage relationships
Module Reuse
Cohesive Modules
Depency Patterns
Acyclic Relationships
Physical Layers
Usability Patterns
Published Interface
Extensibility Patterns
Utility Patterns
Globalcode – Open4education
Manage Relationships
O relacionamento entre dois módulos existe quando uma
classe em um módulo, importa ao menos uma classe de
outro módulo. Em outras palavras:
“Se mudar o conteúdo de um módulo, m2, pode causar
impacto em outro módulo, m1, podemos dizer que m1 tem
uma dependência física em m2 (knoerschild, 2001)”
Dependências diretas e indiretas
Evitando as dependências cíclicas
Invertendo os relacionamentos
Eliminando as dependências físicas entre módulos
Módulos devem permitir a instalação totalmente
independente.
Globalcode – Open4education
Module Reuse
Um dos benefícios mais citados da Orientação a Objetos é
a Reutilização de código, nós falhamos miseravelmente em
conseguir isso apenas utilizando objetos.
Módulos horizontais e verticais
Entafizar a reusabilidade em módulos, não em Classes,
isso aumentara suas chances de sucesso com a
reutilização
Os produtos OpenSource bem sucedidos e largamente
adotados são arquivos JAR, que podem ser facilmente
incorporados em um projeto
Interfaces!! suas lindas
Globalcode – Open4education
Modulos Coesos
O Comportamento de um módulo deve atender a um único
propósito
Um dos principais problemas de um módulo pouco coeso, é
a dificuldade em entender o que ele faz.
Um módulo com Alta Coesão é mais fácil de entender,
manter e reutilizar.
Globalcode – Open4education
Dependencias Acíclicas
Quando existe um relacionamento entre dois módulos, é
aumentado o acoplamento entre eles, um dependência
cíclica aumenta esse acoplamento a um nível que deve ser
evitado.
O impacto de uma mudança em uma estrutura onde
existem dependências cíclicas, é um loop infinito.
As principais técnicas para quebrar uma dependência
cíclica são:
• Escalation
• Demotion
• CallBack
Globalcode – Open4education
Camadas Físicas
O relacionamento entre módulos não deve violar as
camadas conceituais.
É comum separar de forma lógica, as camadas de um
software complexo. Essa separação pode ser física.
A separação física possibilita a reutilização de camadas,
inclusive entre diferentes aplicações.
O relacionamento entre as camadas deve ser sempre das
superiores para as inferiores, nunca o contrário.
Globalcode – Open4education
Interfaces Publicadas
Um módulo deve encapsular os detalhes de sua
implementação, e disponibilizar uma API para que outros
módulo possam acessa-lo. Essa API é a sua interface
publicada, que é definida como:
“A interface publicadas de um módulo consiste em todos
os métodos, classes e pacotes que outros módulos tem a
capacidade de acessar”
A maior vantagem de ter uma boa interface publicada em
seu módulo que ele se torna mais fácil de utilizar por outros
desenvolvedores.
Encapsular a implementação do seu módulo impede que
outros módulo interfiram em seu funcionamento.
Globalcode – Open4education
Globalcode – Open4education
“Just about every software developer is an OSGi
consumer today because just about every platform
and every IDE use OSGi. The major platform vendors,
including IBM, Oracle, and Red Hat are all using OSGi
to build up their platforms. What's interesting is that
OSGi hasn't penetrated the enterprise developer
space yet. At least, it hasn't gone mainstream yet.
Some people might complain that OSGi is too
complex. But what they're really saying is that
designing modular software is really really hard.
Because it is.” – Kirk Knoernschild
http://java.dzone.com/articles/osgi-vs-jigsaw-kirk
Globalcode – Open4education
Globalcode – Open4education
Principais Benefícios
Encapsulamento de fato
Deploy Dinâmico
Versionamento
Gerenciamento de Dependências
Modelo de Execução padronizado
Outros: http://www.osgi.org/Technology/WhyOSGi
Globalcode – Open4education
Globalcode – Open4education
Bundles = Módulo
Bundle é um módulo ou parte dele
Equivalente a um Jar, porém com diversas
informações adicionais que são interpretadas pela
plataforma.
Identificador
Versão
Dependências (bundles e versões)
Exposições/publicações
Globalcode – Open4education
LifeCycle de um Bundle
Globalcode – Open4education
Services
Globalcode – Open4education
OSGI Services
“This is similar to the service-oriented
architecture made popular with web services.
The key difference between web services and
OSGi services is that web services always require
some transport layer, which makes it thousands
times slower than OSGi services that use direct
method invocations.”
*Retirado do site www.osgi.org
Globalcode – Open4education
Demonstração
Projeto web modular OSGi + JavaEE
Empacotamento e geração de arquivos Manifest.mf via maven
EJBs publicados como osgi services
Integração a JPA, JTA
Integração a CDI provida pelo Glassfish Server
https://github.com/filipeportes/goevent
Globalcode – Open4education
Dúvidas?
@filipeportes
omeuefilipe@gmail.com
github.com/filipeportes

Mais conteúdo relacionado

Mais procurados

Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeansSliedesharessbarbosa
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendThiago Sinésio
 
Code Igniter & Zend Framework Uma UniãO De Sucesso
Code Igniter & Zend Framework   Uma UniãO De SucessoCode Igniter & Zend Framework   Uma UniãO De Sucesso
Code Igniter & Zend Framework Uma UniãO De SucessoJose Wilker
 
JBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisJBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisGeorge Gastaldi
 
Introdução ao LiveOak
Introdução ao LiveOakIntrodução ao LiveOak
Introdução ao LiveOakjesuinoPower
 
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)Rafael Oliveira
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento webArlindo Santos
 
Unit Test JavaScript
Unit Test JavaScriptUnit Test JavaScript
Unit Test JavaScriptDan Vitoriano
 
Overview de Drupal pela Just Digital
Overview de Drupal pela Just DigitalOverview de Drupal pela Just Digital
Overview de Drupal pela Just DigitalJust Digital
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEBruno Borges
 
Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Flávio Lisboa
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAYelken Heckman Ferreira Gonzales
 
Introdução ao desenvolvimento de aplicações web
Introdução ao desenvolvimento de aplicações webIntrodução ao desenvolvimento de aplicações web
Introdução ao desenvolvimento de aplicações webRodrigo Branas
 
Curso Java Web (JAVA, JSF, JPA)
Curso Java Web (JAVA, JSF, JPA)Curso Java Web (JAVA, JSF, JPA)
Curso Java Web (JAVA, JSF, JPA)Marcos Batista
 

Mais procurados (20)

Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeans
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Code Igniter & Zend Framework Uma UniãO De Sucesso
Code Igniter & Zend Framework   Uma UniãO De SucessoCode Igniter & Zend Framework   Uma UniãO De Sucesso
Code Igniter & Zend Framework Uma UniãO De Sucesso
 
JBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisJBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 Florianópolis
 
Introdução ao LiveOak
Introdução ao LiveOakIntrodução ao LiveOak
Introdução ao LiveOak
 
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
 
Java Web, o Tutorial
Java Web, o TutorialJava Web, o Tutorial
Java Web, o Tutorial
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento web
 
Vraptor 3
Vraptor 3Vraptor 3
Vraptor 3
 
Unit Test JavaScript
Unit Test JavaScriptUnit Test JavaScript
Unit Test JavaScript
 
Drupal - WEG
Drupal - WEGDrupal - WEG
Drupal - WEG
 
Overview de Drupal pela Just Digital
Overview de Drupal pela Just DigitalOverview de Drupal pela Just Digital
Overview de Drupal pela Just Digital
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EE
 
Introdução a Frameworks
Introdução a FrameworksIntrodução a Frameworks
Introdução a Frameworks
 
Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011
 
Micro frontend
Micro frontendMicro frontend
Micro frontend
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
 
Introdução ao desenvolvimento de aplicações web
Introdução ao desenvolvimento de aplicações webIntrodução ao desenvolvimento de aplicações web
Introdução ao desenvolvimento de aplicações web
 
Curso Java Web (JAVA, JSF, JPA)
Curso Java Web (JAVA, JSF, JPA)Curso Java Web (JAVA, JSF, JPA)
Curso Java Web (JAVA, JSF, JPA)
 

Semelhante a Design patterns e tecnologias para modularização em java tdc2014

Modularização em java com osgi
Modularização em java com osgiModularização em java com osgi
Modularização em java com osgiFilipe Portes
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvcJhordam Siqueira
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
 
JS Experience 2017 - Painel – Angular+React+Vue: Arquitetura, Performance e U...
JS Experience 2017 - Painel – Angular+React+Vue: Arquitetura, Performance e U...JS Experience 2017 - Painel – Angular+React+Vue: Arquitetura, Performance e U...
JS Experience 2017 - Painel – Angular+React+Vue: Arquitetura, Performance e U...iMasters
 
Test driven development
Test driven developmentTest driven development
Test driven developmentclauvane1708
 
Organizando a casa. o front end do jeitinho que a mamãe gosta
Organizando a casa. o front end do jeitinho que a mamãe gostaOrganizando a casa. o front end do jeitinho que a mamãe gosta
Organizando a casa. o front end do jeitinho que a mamãe gostaJohnathan Cardoso
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservicestdc-globalcode
 
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedoresDrupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedoresPedro Rocha
 
Reutilização
ReutilizaçãoReutilização
Reutilizaçãoemjorge
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012Luís Cobucci
 
Bruxarias em Python - Como desenvolver soluções escaláveis
Bruxarias em Python - Como desenvolver soluções escaláveisBruxarias em Python - Como desenvolver soluções escaláveis
Bruxarias em Python - Como desenvolver soluções escaláveisViotti Equipamentos Médicos
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosRafael Chaves
 
Os 5 Níveis de Reuso
Os 5 Níveis de ReusoOs 5 Níveis de Reuso
Os 5 Níveis de ReusoDr. Spock
 
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho DuroTDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Durotdc-globalcode
 
Da introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools FlowDa introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools FlowRicardo Longa
 

Semelhante a Design patterns e tecnologias para modularização em java tdc2014 (20)

Modularização em java com osgi
Modularização em java com osgiModularização em java com osgi
Modularização em java com osgi
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvc
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 
JS Experience 2017 - Painel – Angular+React+Vue: Arquitetura, Performance e U...
JS Experience 2017 - Painel – Angular+React+Vue: Arquitetura, Performance e U...JS Experience 2017 - Painel – Angular+React+Vue: Arquitetura, Performance e U...
JS Experience 2017 - Painel – Angular+React+Vue: Arquitetura, Performance e U...
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Organizando a casa. o front end do jeitinho que a mamãe gosta
Organizando a casa. o front end do jeitinho que a mamãe gostaOrganizando a casa. o front end do jeitinho que a mamãe gosta
Organizando a casa. o front end do jeitinho que a mamãe gosta
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedoresDrupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
 
[CEFETMG][ESw] Aula 6 - Conceitos de projeto
[CEFETMG][ESw] Aula 6 - Conceitos de projeto[CEFETMG][ESw] Aula 6 - Conceitos de projeto
[CEFETMG][ESw] Aula 6 - Conceitos de projeto
 
TDC 2012 - JDF
TDC 2012 - JDFTDC 2012 - JDF
TDC 2012 - JDF
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Reutilização
ReutilizaçãoReutilização
Reutilização
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012
 
Bruxarias em Python - Como desenvolver soluções escaláveis
Bruxarias em Python - Como desenvolver soluções escaláveisBruxarias em Python - Como desenvolver soluções escaláveis
Bruxarias em Python - Como desenvolver soluções escaláveis
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
 
Os 5 Níveis de Reuso
Os 5 Níveis de ReusoOs 5 Níveis de Reuso
Os 5 Níveis de Reuso
 
Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014
 
Machine Learning Black Boxes
Machine Learning Black BoxesMachine Learning Black Boxes
Machine Learning Black Boxes
 
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho DuroTDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
 
Da introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools FlowDa introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools Flow
 

Design patterns e tecnologias para modularização em java tdc2014

  • 1. Globalcode – Open4education Arquitetura Java Design patterns e Tecnologias para Modularização em Java @filipeportes
  • 2. Globalcode – Open4education Mim tarzan... Graduado em Ciência da Computação Um dos Coordenadores do Grupo de Usuários Java de Goiás - @gojava Mais de 7 anos de experiência com desenvolvimento e arquitetura Java Web Atualmente trabalha para a Cast Tecnologia em Brasília – DF Sósia oficial do Brad Pitt
  • 5. Globalcode – Open4education Modularização Definindo um módulo: “A Software Module is a deployable, manageable, natively reusable, composable, stateless unit of software that provides a concise interface to consumers” Instalável Gerenciável Reutilizável Combinável Não guarda estado Oferece uma Interface clara Fonte: Java Application Architecture: Modularity Patterns with Examples Using OSGi
  • 6. Globalcode – Open4education Facetas da Modularização Modelo de Desenvolvimento Formas de construir arquiteturas modulares, e tratar os problemas comuns nesse cenário. Design Patterns Modelo de Execução Foca em como gerenciador sistemas modulares em tempo de execução, ou seja, Plataformas que suportem um Eco-sistema Modular oferecendo recursos que facilitem e potencializem a modularização OSGi, jigsaw, php synfony, CDI Extensions, etc...
  • 7. Globalcode – Open4education Uso vs Reuso Quanto maior a granularidade, menos dependências, mais fácil de usar e mais difícil de reutilizar. Quanto menor a granularidade, mais dependências, mais fácil de reutilizar e mais difícil de usar.
  • 8. Globalcode – Open4education Design em camadas Design comum encontrado em diversos sistemas, nas camadas superiores observa-se uma granularidade maior, ou seja, entidades mais fácil de se usar, a medida que se desce para as camadas inferiores a granularidade diminui, ou seja, entidades menores e mais fáceis de reutilizar.
  • 10. Globalcode – Open4education Patterns Modularização http://www.amazon.com/Java-Application-Architecture-Modularity-Patterns/dp/0321247132 Excelente Livro sobre Modularização de Software e Design Patterns com exemplos práticos em Java e OSGI “Esse livro non Ecxsisssteee” – Padre Quevedo sobre esse livro “Meu Precioooossooo” – Gollum sobre esse Livro “Aiiii que Linnndo, Aiiiii que Luuuxo, Maara, que D+ +, Liiindoo” – Narcisa sobre esse livro “Aaaahôôôoo trem que pula” – típico goiâno sobre esse livro
  • 11. Globalcode – Open4education Principais Patterns 18 patterns descritos no padrão GOF Base Patterns Manage relationships Module Reuse Cohesive Modules Depency Patterns Acyclic Relationships Physical Layers Usability Patterns Published Interface Extensibility Patterns Utility Patterns
  • 12. Globalcode – Open4education Manage Relationships O relacionamento entre dois módulos existe quando uma classe em um módulo, importa ao menos uma classe de outro módulo. Em outras palavras: “Se mudar o conteúdo de um módulo, m2, pode causar impacto em outro módulo, m1, podemos dizer que m1 tem uma dependência física em m2 (knoerschild, 2001)” Dependências diretas e indiretas Evitando as dependências cíclicas Invertendo os relacionamentos Eliminando as dependências físicas entre módulos Módulos devem permitir a instalação totalmente independente.
  • 13. Globalcode – Open4education Module Reuse Um dos benefícios mais citados da Orientação a Objetos é a Reutilização de código, nós falhamos miseravelmente em conseguir isso apenas utilizando objetos. Módulos horizontais e verticais Entafizar a reusabilidade em módulos, não em Classes, isso aumentara suas chances de sucesso com a reutilização Os produtos OpenSource bem sucedidos e largamente adotados são arquivos JAR, que podem ser facilmente incorporados em um projeto Interfaces!! suas lindas
  • 14. Globalcode – Open4education Modulos Coesos O Comportamento de um módulo deve atender a um único propósito Um dos principais problemas de um módulo pouco coeso, é a dificuldade em entender o que ele faz. Um módulo com Alta Coesão é mais fácil de entender, manter e reutilizar.
  • 15. Globalcode – Open4education Dependencias Acíclicas Quando existe um relacionamento entre dois módulos, é aumentado o acoplamento entre eles, um dependência cíclica aumenta esse acoplamento a um nível que deve ser evitado. O impacto de uma mudança em uma estrutura onde existem dependências cíclicas, é um loop infinito. As principais técnicas para quebrar uma dependência cíclica são: • Escalation • Demotion • CallBack
  • 16. Globalcode – Open4education Camadas Físicas O relacionamento entre módulos não deve violar as camadas conceituais. É comum separar de forma lógica, as camadas de um software complexo. Essa separação pode ser física. A separação física possibilita a reutilização de camadas, inclusive entre diferentes aplicações. O relacionamento entre as camadas deve ser sempre das superiores para as inferiores, nunca o contrário.
  • 17. Globalcode – Open4education Interfaces Publicadas Um módulo deve encapsular os detalhes de sua implementação, e disponibilizar uma API para que outros módulo possam acessa-lo. Essa API é a sua interface publicada, que é definida como: “A interface publicadas de um módulo consiste em todos os métodos, classes e pacotes que outros módulos tem a capacidade de acessar” A maior vantagem de ter uma boa interface publicada em seu módulo que ele se torna mais fácil de utilizar por outros desenvolvedores. Encapsular a implementação do seu módulo impede que outros módulo interfiram em seu funcionamento.
  • 19. Globalcode – Open4education “Just about every software developer is an OSGi consumer today because just about every platform and every IDE use OSGi. The major platform vendors, including IBM, Oracle, and Red Hat are all using OSGi to build up their platforms. What's interesting is that OSGi hasn't penetrated the enterprise developer space yet. At least, it hasn't gone mainstream yet. Some people might complain that OSGi is too complex. But what they're really saying is that designing modular software is really really hard. Because it is.” – Kirk Knoernschild http://java.dzone.com/articles/osgi-vs-jigsaw-kirk
  • 21. Globalcode – Open4education Principais Benefícios Encapsulamento de fato Deploy Dinâmico Versionamento Gerenciamento de Dependências Modelo de Execução padronizado Outros: http://www.osgi.org/Technology/WhyOSGi
  • 23. Globalcode – Open4education Bundles = Módulo Bundle é um módulo ou parte dele Equivalente a um Jar, porém com diversas informações adicionais que são interpretadas pela plataforma. Identificador Versão Dependências (bundles e versões) Exposições/publicações
  • 26. Globalcode – Open4education OSGI Services “This is similar to the service-oriented architecture made popular with web services. The key difference between web services and OSGi services is that web services always require some transport layer, which makes it thousands times slower than OSGi services that use direct method invocations.” *Retirado do site www.osgi.org
  • 27. Globalcode – Open4education Demonstração Projeto web modular OSGi + JavaEE Empacotamento e geração de arquivos Manifest.mf via maven EJBs publicados como osgi services Integração a JPA, JTA Integração a CDI provida pelo Glassfish Server https://github.com/filipeportes/goevent