SlideShare uma empresa Scribd logo
1 de 64
Arquitetura Web




     Ralph J. R. Filho
Cenário – Desenvolvimento Web
               Qual a melhor forma
               de desenvolver
               para a Web?
Cenário – Simplicidade
Escrever lógica de negócio em uma página de
 script
  JSP
  ASP
  PHP
Exemplo
include_once ("check.php");
if ($check['level'] > 4)
{
print "<font face='Arial' size='5' color='#FF0000'>";
print "<b>Illegal Access</b>";
print "</font><br>";
print "<font face='Verdana' size='2' color='#000000'>";
print "<b>You do not have permission to view this page.</b></font>";
exit; // Stop script execution
}
Importante esclarecer que
Se a abordagem escolhida para a arquitetura for
 precária, a escolha da tecnologia influencia pouco.
Importante esclarecer que
Existem “n” opções no mercado para desenvolvimento
 de software
Importante esclarecer que
O que faz diferença e agrega valor é uma arquitetura
 bem definida
Importante esclarecer que
A partir da arquitetura, seleciona-se as tecnologias
  adequadas à natureza dos projetos
Exemplo: casa
   Para que público é a casa?
   Qual o clima do local?
   Quais as características do terreno?
   Qual o custo/benefício das madeiras na região?
Exemplo: software
  Para que público é o software? (b2b, b2c, ...)
  Qual o tipo do software (negócio, ferramenta,
   embarcado)
  Quais os requisitos funcionais?
  Quais os requisitos não-funcionais?
  Vai rodar em que ambiente?
  É cliente-servidor ou cliente?
  ...
Ou seja
Uma arquitetura e conjunto de tecnologias
 montados para um projeto “A” pode não ser a
 mais adequada para um projeto “B”
Cada caso é um caso
Analogia
Usa-se o mesmo tipo de material para estas
 duas construções?
Software
Cenário
Com a falta de padrões arquiteturais pode
 ocorrer
  Dificuldade de manutenção
  Baixa escalabilidade
  Baixo nível de reuso
  Código “espaguete”
Dê manutenção nisso
Cenário – Spaghetti code
10 i = 0
20 i = i + 1
30 PRINT i; " squared = "; i * i
40 IF i >= 10 THEN GOTO 60
50 GOTO 20
60 PRINT "Program Completed."
70 END
Technical Debt (Débito técnico)
“The obligation that a software
organization incurs when it
chooses a design or
construction approach that's
expedient in the short term
but that increases
complexity and is more
costly in the long term”
O investimento em arquitetura é necessário,
 porém, seus benefícios são difíceis de
 mensurar
De forma simples, pode-se comparar obtendo
 resultados de projetos (sucesso/insucesso),
 análises de produtividade (hora/homem) e
 índices de qualidade (bugs por
 funcionalidade, medida de desempenho, etc.)
Evolução (1)
Evolução (1)
Separar a lógica da apresentação
  ASP.Net
  PHP + Smarty
  JSF
Melhora a situação, mas...
Geralmente sobrecarrega o código aonde está
 a lógica
Causando os mesmos problemas
Anti-patterns
Evolução (2)
Evolução (2)
Separar a lógica da apresentação, usando um
 meio-de-campo
Filosofia MVC

       Modelo




       Controle




        Visão
MVC
A visão não precisa saber que o modelo existe
 e vice-versa
MVC
Visão
  Cadastra-Clientes.html
Controle
  ClientesControl.java
Modelo
  ClientesModel.java
MVC
Já é alguma coisa, mas pode melhorar
O código no modelo tende à ficar extenso
MVC é uma filosofia de arquitetura, pode ser
 adaptada
Abre aspas
  Alguns modelos e métodos servem como guias.
    Não são “doutrinas”.
  Não é pecado personalizar
Evolução (3)
Evolução (3)
O esforço de programação deve estar na
 modelagem do domínio de negócio, afinal... é
 disso que se trata a programação de sistemas
 de negócio
Isto se aplica a softwares de negócio
Outros tipos de software: ferramentas,
 embarcado
Domain-Driven Design
Conjunto de princípios
Baseado no MVC
Foco no reuso de código
Facilidade de implementação
Equipes distribuídas
Arquitetura orientada a serviço
Cloud-computing / Web-Services
DDD
A camada de Domínio
Contém toda a lógica do negócio
Assinatura de métodos
Baixo nível de acoplamento
Aumenta o número de arquivos, reduz o
 número de linhas de código
Modelo de arquitetura que evoluiu com a
 tecnologia
Montando uma arquitetura
Tecnologia utilizada
  Java EE
Java EE
Conjunto de especificações
Dita como deve ser implementado
Transfere complexidade repetitiva das
  aplicações de negócio para a arquitetura
Java EE 6
?


         INFRA            EJB             JPA




DOMAIN           Repos.         Service         Entity




   CONTROL                       JSF




                                                         ?
Oracle Glassfish Community
Implementa o Java EE
Gerencia transações e conexões com o BD
Disponibiliza ambiente para servlets
Controla aspectos de segurança e acesso
Concorrentes
  JBoss AS
  Apache Geronimo
Enterprise Java Beans (EJB)
Especificação versão 3.1 (10/12/2009)
Integra-se com a camada de persistência
Controla estado de beans
Controla aspectos de segurança
Recursos de agendamento
Suporte à web services
Java Persistence API (JPA)
Especificação 2.0 (10/12/2009)
Oferece estrutura para mapear entidades do
 banco de dados
Controla aspectos de CRUD
Oferece os benefícios de O.O. para BD
 relacionais
Implementadores: Hibernate, TopLink, etc.
Java Server Faces (JSF)
Especificação 2.1 (22/10/2010) (Mojarra)
Disponibiliza uma separação clara entre a
 camada de visão e a camada de controle
Disponibliza templates
Disponibiliza componentes visuais
Disponibiliza AJAX e controle de eventos
PrimeFaces
Biblioteca de componentes visuais que utiliza o
  JSF e o Jquery (centenas de componentes)
Atualmente na versão 3.2
Simplifica a construção de páginas web
Ajuda o programador a manter o foco na lógica
  do negócio
Concorrentes
  RichFaces
  IceFaces
Exemplo
Lista de Notas Fiscais
  lista-nota-fiscal.xhtml
  NotaFiscalMB.java
  NotaFiscalRepository.java
  NotaFiscalRepositoryJPA.java
  NotaFiscalService.java
  NotaFiscalServiceImpl.java
  NotaFiscal.java
Exemplo
<p:dataTable var="nf" value="#{notaFiscalMB.notasFiscais}" sortBy="#{nf.numero}" id="nf_table" >

         <f:facet name="header">Lista de Notas Fiscais</f:facet>

      <p:column id="modelColumn" filterBy="#{nf.numero}" headerText="Número" sortBy="#{nf.numero}">

     <h:outputText value="#{nf.numero}" /></p:column>

    <p:column id="yearHeader" headerText="Série" sortBy="#{nf.serie}">#{nf.serie}</p:column>

    <p:column id="manufacturerHeader" headerText="Emitente" sortBy="#{nf.razaoSocialDestinatario}">

       #{nf.razaoSocialDestinatario}</p:column>

    <p:column id="colorHeader" headerText="Data Emissão" sortBy="#{nf.dataEmissao}">

       #{nf.dataEmissao}</p:column>

    <p:column id="vlNota" headerText="Valor Nota Fiscal" sortBy="#{nf.valor}">

       #{nf.valor}</p:column>

  </p:dataTable>
Exemplo
Resultado
Exemplo
Exemplo
Notem
 Os nomes no singular
 Os nomes em inglês
 O tamanho dos nomes dos arquivos
 A limpeza e a clareza dos códigos-fonte (POJO's)
Posso substituir a camada de Infra, Controle,
 Visão, Servidor de Aplicação, Banco de
 Dados e a saída para o usuário
No entanto, a modelagem de domínio pode
 continuar intacta
O domínio representa o entendimento do
 programador sobre a lógica do negócio
É no domínio que ficará a inteligência do
 negócio
  Regras de Negócio
Eu digo o quê deve ser feito e não como
  Padrões ISO são assim
  Modelos de desenvolvimento são assim
O como é feito vai nas camadas periféricas da
 arquitetura que implementam o domínio
Tenho condições de fazer
Caminho de implementação
Arquitetar
   Assinar métodos do domínio
   Mapear entidades
Implementar
   Implementar repositórios e regras de negócio
   Implementar interfaces e controladores
   Implementar validações e tratamento de erros
   Implementar testes unitários
Adição de boas práticas
Inspeção de código
Projeto de solução (UML)
Foco no negócio
Programação coletiva (o código pertence à
 organização e não ao programador)
Padrões devem ser evoluídos constantemente
Nota
Não há nirvana para uma organização. O apse
 é a melhoria contínua de processos bem
 definidos, estáveis e adequadamente
 quantificados
Vantagens e Desvantagens
Estabilidade           Back-end não é trivial!
Comunidades ativas     Curva de aprendizado
Material didático      Debug em alto nível
Manutenibilidade
Produtividade
Desempenho
Rápido de Prototipar
Tempo investido
Aumenta o investimento em pensar como fazer
 para diminuir o investimento em fazer
  Mais planejamento, menos esforço
Tempo Investido
E quanto à liberações urgentes?
  Refactoring
Planejamento de releases é crucial
Organização da equipe e da demanda é crucial
Política de gerenciamento de configuração
Política de manutenção
Lembrando
Cada caso é um caso (natureza dos projetos)
Todas as abordagens tem vantagens e
 desvantagens
A melhor solução é aquela que atende à tua
 necessidade
É bom manter os olhos abertos às novidades
A inovação pode ser um diferencial competitivo
Ambiente decente
Ambiente Decente


                     Para desenvolvimento, em
                     geral, os S.O.'s pinguim-like
                     são superiores




Escolher uma IDE é como
escolher um time de futebol.
Mas o eclipse tem uma
legião de fãs.
JAVA em 2012
#1 Linguagem de programação
9 milhões de desenvolvedores
1 bilhão de downloads por ano
3 bilhões de devices rodando java
97% de computadores empresariais
17 anos de mercado
Java - JCP
Para encerrar – Martin Fowler

“Any fool can write code that a computer can understand. A good
  programmer write code that humans can understand”

Mais conteúdo relacionado

Mais procurados

Extreme programming
Extreme programmingExtreme programming
Extreme programmingJ. C.
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de Softwareelliando dias
 
Integração contínua - Rumo à automação e ao DEVOPS
Integração contínua - Rumo à automação e ao DEVOPSIntegração contínua - Rumo à automação e ao DEVOPS
Integração contínua - Rumo à automação e ao DEVOPSFabiano Souza
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de SoftwareNécio de Lima Veras
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De SoftwareCursoSENAC
 
Introdução: eXtreme Programming
Introdução: eXtreme ProgrammingIntrodução: eXtreme Programming
Introdução: eXtreme ProgrammingDenis L Presciliano
 
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)Fábio Nogueira de Lucena
 
Introdução a engenharia de software aula 01
Introdução a engenharia de software   aula 01Introdução a engenharia de software   aula 01
Introdução a engenharia de software aula 01Franklin Matos Correia
 
Documentação
DocumentaçãoDocumentação
DocumentaçãoLuiz China
 
O (papel do) Arquiteto de Software
O (papel do) Arquiteto de SoftwareO (papel do) Arquiteto de Software
O (papel do) Arquiteto de SoftwarePeter Jandl Junior
 
Trabalho qualidade de software sistemas de informação
Trabalho qualidade de software   sistemas de informaçãoTrabalho qualidade de software   sistemas de informação
Trabalho qualidade de software sistemas de informaçãoFernando Gomes Chaves
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven DesignÍtalo Bandeira
 
Engenharia de Software - Unimep/Pronatec - Aula 2
Engenharia de Software - Unimep/Pronatec - Aula 2Engenharia de Software - Unimep/Pronatec - Aula 2
Engenharia de Software - Unimep/Pronatec - Aula 2André Phillip Bertoletti
 
BaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de SoftwareBaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de SoftwareAdriano Bertucci
 
COMPARANDO FRAMEWORKS DE ARQUITETURA CORPORATIVA PARA APLICAÇÃO EM E-COMMERCE
COMPARANDO FRAMEWORKS DE ARQUITETURA CORPORATIVA PARA APLICAÇÃO EM E-COMMERCECOMPARANDO FRAMEWORKS DE ARQUITETURA CORPORATIVA PARA APLICAÇÃO EM E-COMMERCE
COMPARANDO FRAMEWORKS DE ARQUITETURA CORPORATIVA PARA APLICAÇÃO EM E-COMMERCEFernando S. de Paulo
 

Mais procurados (20)

Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de Software
 
Integração contínua - Rumo à automação e ao DEVOPS
Integração contínua - Rumo à automação e ao DEVOPSIntegração contínua - Rumo à automação e ao DEVOPS
Integração contínua - Rumo à automação e ao DEVOPS
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de Software
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De Software
 
Tudo são Dados - PHP Conference 2008
Tudo são Dados - PHP Conference 2008Tudo são Dados - PHP Conference 2008
Tudo são Dados - PHP Conference 2008
 
Introdução: eXtreme Programming
Introdução: eXtreme ProgrammingIntrodução: eXtreme Programming
Introdução: eXtreme Programming
 
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
 
Introdução a engenharia de software aula 01
Introdução a engenharia de software   aula 01Introdução a engenharia de software   aula 01
Introdução a engenharia de software aula 01
 
Documentação
DocumentaçãoDocumentação
Documentação
 
O (papel do) Arquiteto de Software
O (papel do) Arquiteto de SoftwareO (papel do) Arquiteto de Software
O (papel do) Arquiteto de Software
 
Fundamentos da Engenharia de Software
Fundamentos da Engenharia de SoftwareFundamentos da Engenharia de Software
Fundamentos da Engenharia de Software
 
Trabalho qualidade de software sistemas de informação
Trabalho qualidade de software   sistemas de informaçãoTrabalho qualidade de software   sistemas de informação
Trabalho qualidade de software sistemas de informação
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven Design
 
Aula Gestão de Projetos Escopo, Tempo e Custo
Aula Gestão de Projetos Escopo, Tempo e CustoAula Gestão de Projetos Escopo, Tempo e Custo
Aula Gestão de Projetos Escopo, Tempo e Custo
 
Engenharia de Software - Unimep/Pronatec - Aula 2
Engenharia de Software - Unimep/Pronatec - Aula 2Engenharia de Software - Unimep/Pronatec - Aula 2
Engenharia de Software - Unimep/Pronatec - Aula 2
 
BaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de SoftwareBaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de Software
 
Aula 8 Modelagem de Dados
Aula 8 Modelagem de DadosAula 8 Modelagem de Dados
Aula 8 Modelagem de Dados
 
Documentos de software
Documentos de softwareDocumentos de software
Documentos de software
 
COMPARANDO FRAMEWORKS DE ARQUITETURA CORPORATIVA PARA APLICAÇÃO EM E-COMMERCE
COMPARANDO FRAMEWORKS DE ARQUITETURA CORPORATIVA PARA APLICAÇÃO EM E-COMMERCECOMPARANDO FRAMEWORKS DE ARQUITETURA CORPORATIVA PARA APLICAÇÃO EM E-COMMERCE
COMPARANDO FRAMEWORKS DE ARQUITETURA CORPORATIVA PARA APLICAÇÃO EM E-COMMERCE
 

Semelhante a Arquitetura web para sistemas de negócio

Infoschema - Company Overview
Infoschema - Company OverviewInfoschema - Company Overview
Infoschema - Company OverviewRenilton Oliveira
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Softwareeros.viggiano
 
O futuro do arquiteto e das arquiteturas Java Enterprise
O futuro do arquiteto e das arquiteturas Java EnterpriseO futuro do arquiteto e das arquiteturas Java Enterprise
O futuro do arquiteto e das arquiteturas Java EnterpriseGlobalcode
 
Separando arquitetura e negócios em sistemas de gestão
Separando arquitetura e negócios em sistemas de gestãoSeparando arquitetura e negócios em sistemas de gestão
Separando arquitetura e negócios em sistemas de gestãoRafael Chaves
 
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 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...iMasters
 
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)Luciano Condé
 
Criando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMindCriando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMindJaydson Gomes
 
Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01Alan Carlos
 
Microsoft ALM = Produtividade
Microsoft ALM = ProdutividadeMicrosoft ALM = Produtividade
Microsoft ALM = ProdutividadeAdriano Bertucci
 
Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013André Borgonovo
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoComunidade NetPonto
 
Teched Brasil 2005 - A Metodologia MSF Agile e o Visual Studio Team System
Teched Brasil 2005 -  A Metodologia MSF Agile e o Visual Studio Team SystemTeched Brasil 2005 -  A Metodologia MSF Agile e o Visual Studio Team System
Teched Brasil 2005 - A Metodologia MSF Agile e o Visual Studio Team SystemFábio Câmara
 

Semelhante a Arquitetura web para sistemas de negócio (20)

Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 
Infoschema - Company Overview
Infoschema - Company OverviewInfoschema - Company Overview
Infoschema - Company Overview
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Apresentação ISFramework
Apresentação ISFrameworkApresentação ISFramework
Apresentação ISFramework
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
O futuro do arquiteto e das arquiteturas Java Enterprise
O futuro do arquiteto e das arquiteturas Java EnterpriseO futuro do arquiteto e das arquiteturas Java Enterprise
O futuro do arquiteto e das arquiteturas Java Enterprise
 
Separando arquitetura e negócios em sistemas de gestão
Separando arquitetura e negócios em sistemas de gestãoSeparando arquitetura e negócios em sistemas de gestão
Separando arquitetura e negócios em sistemas de gestão
 
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 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
 
Curso jsf
Curso jsfCurso jsf
Curso jsf
 
BDD com Xamarin UI Test e Specflow
BDD com Xamarin UI Test e SpecflowBDD com Xamarin UI Test e Specflow
BDD com Xamarin UI Test e Specflow
 
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
 
Criando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMindCriando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMind
 
Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01
 
Microsoft ALM = Produtividade
Microsoft ALM = ProdutividadeMicrosoft ALM = Produtividade
Microsoft ALM = Produtividade
 
Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013
 
DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven Design
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de Versão
 
Teched Brasil 2005 - A Metodologia MSF Agile e o Visual Studio Team System
Teched Brasil 2005 -  A Metodologia MSF Agile e o Visual Studio Team SystemTeched Brasil 2005 -  A Metodologia MSF Agile e o Visual Studio Team System
Teched Brasil 2005 - A Metodologia MSF Agile e o Visual Studio Team System
 

Mais de Ralph Rassweiler

Introdução à sistemas de recomendação
Introdução à sistemas de recomendaçãoIntrodução à sistemas de recomendação
Introdução à sistemas de recomendaçãoRalph Rassweiler
 
Sistemas de Recomendação - Parte 2
Sistemas de Recomendação - Parte 2Sistemas de Recomendação - Parte 2
Sistemas de Recomendação - Parte 2Ralph Rassweiler
 
Sistemas de Recomendação - Parte 1
Sistemas de Recomendação - Parte 1Sistemas de Recomendação - Parte 1
Sistemas de Recomendação - Parte 1Ralph Rassweiler
 
Produtividade & elegância com linux
Produtividade & elegância com linuxProdutividade & elegância com linux
Produtividade & elegância com linuxRalph Rassweiler
 
Especificação de Requisitos de Software
Especificação de Requisitos de SoftwareEspecificação de Requisitos de Software
Especificação de Requisitos de SoftwareRalph Rassweiler
 
Estruturas organizacionais e comportamentos profissionais
Estruturas organizacionais e comportamentos profissionaisEstruturas organizacionais e comportamentos profissionais
Estruturas organizacionais e comportamentos profissionaisRalph Rassweiler
 
Mobilidade inova ti_em_saude
Mobilidade inova ti_em_saudeMobilidade inova ti_em_saude
Mobilidade inova ti_em_saudeRalph Rassweiler
 
Scrum no contexto de processos de desenvolvimento
Scrum no contexto de processos de desenvolvimentoScrum no contexto de processos de desenvolvimento
Scrum no contexto de processos de desenvolvimentoRalph Rassweiler
 
Cinco tecnicas uteis para gerenciamento de projetos
Cinco tecnicas uteis para gerenciamento de projetosCinco tecnicas uteis para gerenciamento de projetos
Cinco tecnicas uteis para gerenciamento de projetosRalph Rassweiler
 
Processos de Desenvolvimento de Software - teoria e prática
Processos de Desenvolvimento de Software - teoria e práticaProcessos de Desenvolvimento de Software - teoria e prática
Processos de Desenvolvimento de Software - teoria e práticaRalph Rassweiler
 

Mais de Ralph Rassweiler (10)

Introdução à sistemas de recomendação
Introdução à sistemas de recomendaçãoIntrodução à sistemas de recomendação
Introdução à sistemas de recomendação
 
Sistemas de Recomendação - Parte 2
Sistemas de Recomendação - Parte 2Sistemas de Recomendação - Parte 2
Sistemas de Recomendação - Parte 2
 
Sistemas de Recomendação - Parte 1
Sistemas de Recomendação - Parte 1Sistemas de Recomendação - Parte 1
Sistemas de Recomendação - Parte 1
 
Produtividade & elegância com linux
Produtividade & elegância com linuxProdutividade & elegância com linux
Produtividade & elegância com linux
 
Especificação de Requisitos de Software
Especificação de Requisitos de SoftwareEspecificação de Requisitos de Software
Especificação de Requisitos de Software
 
Estruturas organizacionais e comportamentos profissionais
Estruturas organizacionais e comportamentos profissionaisEstruturas organizacionais e comportamentos profissionais
Estruturas organizacionais e comportamentos profissionais
 
Mobilidade inova ti_em_saude
Mobilidade inova ti_em_saudeMobilidade inova ti_em_saude
Mobilidade inova ti_em_saude
 
Scrum no contexto de processos de desenvolvimento
Scrum no contexto de processos de desenvolvimentoScrum no contexto de processos de desenvolvimento
Scrum no contexto de processos de desenvolvimento
 
Cinco tecnicas uteis para gerenciamento de projetos
Cinco tecnicas uteis para gerenciamento de projetosCinco tecnicas uteis para gerenciamento de projetos
Cinco tecnicas uteis para gerenciamento de projetos
 
Processos de Desenvolvimento de Software - teoria e prática
Processos de Desenvolvimento de Software - teoria e práticaProcessos de Desenvolvimento de Software - teoria e prática
Processos de Desenvolvimento de Software - teoria e prática
 

Arquitetura web para sistemas de negócio

  • 1. Arquitetura Web Ralph J. R. Filho
  • 2. Cenário – Desenvolvimento Web Qual a melhor forma de desenvolver para a Web?
  • 3. Cenário – Simplicidade Escrever lógica de negócio em uma página de script JSP ASP PHP
  • 4. Exemplo include_once ("check.php"); if ($check['level'] > 4) { print "<font face='Arial' size='5' color='#FF0000'>"; print "<b>Illegal Access</b>"; print "</font><br>"; print "<font face='Verdana' size='2' color='#000000'>"; print "<b>You do not have permission to view this page.</b></font>"; exit; // Stop script execution }
  • 5. Importante esclarecer que Se a abordagem escolhida para a arquitetura for precária, a escolha da tecnologia influencia pouco.
  • 6. Importante esclarecer que Existem “n” opções no mercado para desenvolvimento de software
  • 7. Importante esclarecer que O que faz diferença e agrega valor é uma arquitetura bem definida
  • 8. Importante esclarecer que A partir da arquitetura, seleciona-se as tecnologias adequadas à natureza dos projetos Exemplo: casa Para que público é a casa? Qual o clima do local? Quais as características do terreno? Qual o custo/benefício das madeiras na região?
  • 9. Exemplo: software Para que público é o software? (b2b, b2c, ...) Qual o tipo do software (negócio, ferramenta, embarcado) Quais os requisitos funcionais? Quais os requisitos não-funcionais? Vai rodar em que ambiente? É cliente-servidor ou cliente? ...
  • 10. Ou seja Uma arquitetura e conjunto de tecnologias montados para um projeto “A” pode não ser a mais adequada para um projeto “B” Cada caso é um caso
  • 11. Analogia Usa-se o mesmo tipo de material para estas duas construções?
  • 13. Cenário Com a falta de padrões arquiteturais pode ocorrer Dificuldade de manutenção Baixa escalabilidade Baixo nível de reuso Código “espaguete”
  • 15. Cenário – Spaghetti code 10 i = 0 20 i = i + 1 30 PRINT i; " squared = "; i * i 40 IF i >= 10 THEN GOTO 60 50 GOTO 20 60 PRINT "Program Completed." 70 END
  • 16. Technical Debt (Débito técnico) “The obligation that a software organization incurs when it chooses a design or construction approach that's expedient in the short term but that increases complexity and is more costly in the long term”
  • 17. O investimento em arquitetura é necessário, porém, seus benefícios são difíceis de mensurar De forma simples, pode-se comparar obtendo resultados de projetos (sucesso/insucesso), análises de produtividade (hora/homem) e índices de qualidade (bugs por funcionalidade, medida de desempenho, etc.)
  • 19. Evolução (1) Separar a lógica da apresentação ASP.Net PHP + Smarty JSF
  • 20. Melhora a situação, mas... Geralmente sobrecarrega o código aonde está a lógica Causando os mesmos problemas
  • 22.
  • 24. Evolução (2) Separar a lógica da apresentação, usando um meio-de-campo
  • 25. Filosofia MVC Modelo Controle Visão
  • 26. MVC A visão não precisa saber que o modelo existe e vice-versa
  • 27. MVC Visão Cadastra-Clientes.html Controle ClientesControl.java Modelo ClientesModel.java
  • 28. MVC Já é alguma coisa, mas pode melhorar O código no modelo tende à ficar extenso MVC é uma filosofia de arquitetura, pode ser adaptada Abre aspas Alguns modelos e métodos servem como guias. Não são “doutrinas”. Não é pecado personalizar
  • 30. Evolução (3) O esforço de programação deve estar na modelagem do domínio de negócio, afinal... é disso que se trata a programação de sistemas de negócio Isto se aplica a softwares de negócio Outros tipos de software: ferramentas, embarcado
  • 31. Domain-Driven Design Conjunto de princípios Baseado no MVC Foco no reuso de código Facilidade de implementação Equipes distribuídas Arquitetura orientada a serviço Cloud-computing / Web-Services
  • 32. DDD
  • 33. A camada de Domínio Contém toda a lógica do negócio Assinatura de métodos Baixo nível de acoplamento Aumenta o número de arquivos, reduz o número de linhas de código Modelo de arquitetura que evoluiu com a tecnologia
  • 35. Java EE Conjunto de especificações Dita como deve ser implementado Transfere complexidade repetitiva das aplicações de negócio para a arquitetura Java EE 6
  • 36. ? INFRA EJB JPA DOMAIN Repos. Service Entity CONTROL JSF ?
  • 37. Oracle Glassfish Community Implementa o Java EE Gerencia transações e conexões com o BD Disponibiliza ambiente para servlets Controla aspectos de segurança e acesso Concorrentes JBoss AS Apache Geronimo
  • 38. Enterprise Java Beans (EJB) Especificação versão 3.1 (10/12/2009) Integra-se com a camada de persistência Controla estado de beans Controla aspectos de segurança Recursos de agendamento Suporte à web services
  • 39. Java Persistence API (JPA) Especificação 2.0 (10/12/2009) Oferece estrutura para mapear entidades do banco de dados Controla aspectos de CRUD Oferece os benefícios de O.O. para BD relacionais Implementadores: Hibernate, TopLink, etc.
  • 40. Java Server Faces (JSF) Especificação 2.1 (22/10/2010) (Mojarra) Disponibiliza uma separação clara entre a camada de visão e a camada de controle Disponibliza templates Disponibiliza componentes visuais Disponibiliza AJAX e controle de eventos
  • 41. PrimeFaces Biblioteca de componentes visuais que utiliza o JSF e o Jquery (centenas de componentes) Atualmente na versão 3.2 Simplifica a construção de páginas web Ajuda o programador a manter o foco na lógica do negócio Concorrentes RichFaces IceFaces
  • 42. Exemplo Lista de Notas Fiscais lista-nota-fiscal.xhtml NotaFiscalMB.java NotaFiscalRepository.java NotaFiscalRepositoryJPA.java NotaFiscalService.java NotaFiscalServiceImpl.java NotaFiscal.java
  • 43. Exemplo <p:dataTable var="nf" value="#{notaFiscalMB.notasFiscais}" sortBy="#{nf.numero}" id="nf_table" > <f:facet name="header">Lista de Notas Fiscais</f:facet> <p:column id="modelColumn" filterBy="#{nf.numero}" headerText="Número" sortBy="#{nf.numero}"> <h:outputText value="#{nf.numero}" /></p:column> <p:column id="yearHeader" headerText="Série" sortBy="#{nf.serie}">#{nf.serie}</p:column> <p:column id="manufacturerHeader" headerText="Emitente" sortBy="#{nf.razaoSocialDestinatario}"> #{nf.razaoSocialDestinatario}</p:column> <p:column id="colorHeader" headerText="Data Emissão" sortBy="#{nf.dataEmissao}"> #{nf.dataEmissao}</p:column> <p:column id="vlNota" headerText="Valor Nota Fiscal" sortBy="#{nf.valor}"> #{nf.valor}</p:column> </p:dataTable>
  • 48. Notem Os nomes no singular Os nomes em inglês O tamanho dos nomes dos arquivos A limpeza e a clareza dos códigos-fonte (POJO's)
  • 49. Posso substituir a camada de Infra, Controle, Visão, Servidor de Aplicação, Banco de Dados e a saída para o usuário No entanto, a modelagem de domínio pode continuar intacta
  • 50. O domínio representa o entendimento do programador sobre a lógica do negócio
  • 51. É no domínio que ficará a inteligência do negócio Regras de Negócio Eu digo o quê deve ser feito e não como Padrões ISO são assim Modelos de desenvolvimento são assim O como é feito vai nas camadas periféricas da arquitetura que implementam o domínio
  • 53. Caminho de implementação Arquitetar Assinar métodos do domínio Mapear entidades Implementar Implementar repositórios e regras de negócio Implementar interfaces e controladores Implementar validações e tratamento de erros Implementar testes unitários
  • 54. Adição de boas práticas Inspeção de código Projeto de solução (UML) Foco no negócio Programação coletiva (o código pertence à organização e não ao programador) Padrões devem ser evoluídos constantemente
  • 55. Nota Não há nirvana para uma organização. O apse é a melhoria contínua de processos bem definidos, estáveis e adequadamente quantificados
  • 56. Vantagens e Desvantagens Estabilidade Back-end não é trivial! Comunidades ativas Curva de aprendizado Material didático Debug em alto nível Manutenibilidade Produtividade Desempenho Rápido de Prototipar
  • 57. Tempo investido Aumenta o investimento em pensar como fazer para diminuir o investimento em fazer Mais planejamento, menos esforço
  • 58. Tempo Investido E quanto à liberações urgentes? Refactoring Planejamento de releases é crucial Organização da equipe e da demanda é crucial Política de gerenciamento de configuração Política de manutenção
  • 59. Lembrando Cada caso é um caso (natureza dos projetos) Todas as abordagens tem vantagens e desvantagens A melhor solução é aquela que atende à tua necessidade É bom manter os olhos abertos às novidades A inovação pode ser um diferencial competitivo
  • 61. Ambiente Decente Para desenvolvimento, em geral, os S.O.'s pinguim-like são superiores Escolher uma IDE é como escolher um time de futebol. Mas o eclipse tem uma legião de fãs.
  • 62. JAVA em 2012 #1 Linguagem de programação 9 milhões de desenvolvedores 1 bilhão de downloads por ano 3 bilhões de devices rodando java 97% de computadores empresariais 17 anos de mercado
  • 64. Para encerrar – Martin Fowler “Any fool can write code that a computer can understand. A good programmer write code that humans can understand”