projeto de sistemas com frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · –...

50
Projeto de Sistemas com Frameworks Vítor E. Silva Souza ([email protected] ) http://www.inf.ufes.br/ ~ vitorsouza Departamento de Informática Universidade Federal do Espírito Santo

Upload: haduong

Post on 14-Feb-2019

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Projeto de Sistemas com

Frameworks

Vítor E. Silva Souza

([email protected]) http://www.inf.ufes.br/~ vitorsouza

Departamento de Informática

Universidade Federal do Espírito Santo

Page 2: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

O  que  vamos  discu.r  hoje  •  O  que  são  frameworks?  

–  De  mapeamento  objeto/relacional?  –  De  injeção  de  dependências?  –  Controladores  Frontais/MVC?  –  Etc.?  

•  Por  que  u.lizá-­‐los  no  desenvolvimento  de  uma  aplicação?  •  Por  que  considerá-­‐los  já  na  fase  de  projeto?  •  FrameWeb.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   2  

Page 3: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

INTRODUÇÃO  Projeto  de  Sistemas  com  Frameworks  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   3  

Page 4: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Funcionalidades  de  um  sistema    

•  Cadastrar  um  usuário;  •  Pesquisar  um  livro  pelo  nome;  

•  Agendar  uma  reunião;  •  Calcular  o  valor  de  uma  multa;  

•  Localizar  um  endereço  em  um  mapa;  

•  Etc.  

•  Inserir/recuperar/alterar  objetos  em  uma  base  de  dados;  

•  Responder  a  requisições  feitas  por  navegadores  Web;  

•  Obter  instâncias  de  objetos  cujos  serviços  são  necessários;  

•  Etc.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   4  

Negócio Infraestrutura

Page 5: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

•  Inserir/recuperar/alterar  objetos  em  uma  base  de  dados;  

•  Responder  a  requisições  feitas  por  navegadores  Web;  

•  Obter  instâncias  de  objetos  cujos  serviços  são  necessários;  

•  Etc.  

Infraestrutura

Genéricas: se aplicam a

qualquer sistema

•  Cadastrar  um  usuário;  •  Pesquisar  um  livro  pelo  nome;  

•  Agendar  uma  reunião;  •  Calcular  o  valor  de  uma  multa;  

•  Localizar  um  endereço  em  um  mapa;  

•  Etc.  

Negócio

Específicas: dependem

da aplicação

Funcionalidades  de  um  sistema    

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   5  

Page 6: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Generalizando  por  meio  de  parâmetros  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   6  

INSERT INTO Usuario (nome, email, senha) VALUES (?, ?, ?)

INSERT INTO Livro (nome, isbn) VALUES (?, ?)

INSERT INTO Autor (nome) VALUES (?)

INSERT INTO <nome da tabela> (<nomes das colunas>) VALUES (<? separados por vírgula>)

Parâmetros

Valores relativos às colunas da tabela.

Parâmetros -  Nome da tabela; -  Nomes das colunas da

tabela; -  Valores relativos às

colunas da tabela.

...

Page 7: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Generalizando  por  meio  de  parâmetros  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   7  

BD

Criar o esquema

Armazenar objetos

Efetuar consultas

Parâmetros -  Nomes das tabelas (default: nome da classe); -  Nomes das colunas (default: nome dos atributos); -  Objetos a serem armazenados; -  Parâmetros das consultas; -  Etc.

Page 8: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

o  Aumentam  a  produ.vidade:  código  pronto;  

o  Simplificam  o  sistema:  foco  na  lógica  de  negócio;  

o  Promovem  sobware  robusto:  código  testado,  melhores  prá.cas;  

Frameworks  

•  Requerem  uma  curva  de  aprendizado;  

•  Constringem  a  solução  a  um  molde  (mesmo  que  parametrizado);  

•  Não  se  aplicam  a  todas  as  situações.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   8  

Um framework é um conjunto de classes que cooperam para formar um projeto reutilizável para uma classe específica de aplicativos.

Eric Gamma

Page 9: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Tipos  de  frameworks  •  Mapeamento  objeto/relacional;  •  Injeção  de  dependências;  •  Controlador  frontal  /  MVC  /  Web;  •  Decorador;  •  Programação  Orientada  a  Aspectos;  •  Auten.cação;  •  Busca;  •  Logging;  •  Etc.  •  Etc.  •  Etc.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   9  

Page 10: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Arquiteturas  baseadas  em  containers  •  Containers  são  servidores  que  gerenciam  o  ciclo  de  vida  de  

certos  objetos;  •  Em  Java,  existe  a  plataforma  Java  Enterprise  Edi.on  

(recentemente,  foram  adicionados  perfis  ao  Java  EE);  •  Componentes  do  Java  EE  funcionam  como  frameworks:  

–  JPA:  mapeamento  objeto/relacional;  –  CDI:  injeção  de  dependências;  –  JSF:  controlador  frontal;  –  Facelets:  decorador;  –  Etc.  

•  Muitos  deles  foram  baseados  em  frameworks.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   10  

Page 11: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

MAPEAMENTO  OBJETO/RELACIONAL  

Projeto  de  Sistemas  com  Frameworks  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   11  

Page 12: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Incompa.bilidade  de  paradigmas  •  Bancos  de  dados  relacionais  são  muito  populares;  •  Representação  tabular  vs.  grafo  de  objetos;  •  Problemas:  

–  Granularidade  limitada  a  tabela  e  coluna;  –  Herança:  armazenamento  e  polimorfismo;  –  Iden.dade:  ==  vs.  equals()  vs.  chave  primária;  –  Associações:  transposições  de  chave;  –  Navegação  no  grafo  de  objetos:  o  problema  dos  N+1  SELECTs.  

•  Custo:  –  Repe.ção  de  estruturas  em  comandos  SELECT,  INSERT,  etc.;  –  Modelo  de  objetos  “torcido”  para  se  adequar;  –  Sobware  de  diqcil  manutenção.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   12  

Page 13: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Mapeamento  Objeto/Relacional  

•  Classes;  •  Objetos;  •  Atributos;  •  Associações.  

•  Tabelas;  •  Linhas  (tuplas);  •  Colunas;  •  Chaves.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   13  

Linguagem OO BD Relacional

BD

Nome Email Senha

Usuario

Page 14: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Mapeamento  Objeto/Relacional  

•  Classes;  •  Objetos;  •  Atributos;  •  Associações.  

•  Tabelas;  •  Linhas  (tuplas);  •  Colunas;  •  Chaves.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   14  

Linguagem OO BD Relacional

BD Mapeamento Objeto/Relacional

Object/Relational Mapping (ORM)

Persistência automática e transparente de objetos de um aplicativo OO para tabelas em um banco de dados relacional, utilizando meta-dados que descrevem o mapeamento entre os objetos e o banco de dados. Em essência, transforma dados de

uma representação para a outra. Christian Bauer and Gavin King

Page 15: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Componentes  de  uma  solução  ORM  •  API  para  efe.vação  de  operações  CRUD;  •  Linguagem  ou  API  para  construção  de  consultas  que  se  

refiram  às  classes  ou  suas  propriedades;  •  Mecanismo  de  especificação  dos  meta-­‐dados  de  

mapeamento;  •  Técnicas  de  interação  com  o  BD  relacional,  incluindo:  

–  Verificação  de  objetos  sujos  (dirty  checking);  –  Associações  recuperadas  sob  demanda  (lazy  associa.on  fetching);  

–  Outras  funções  de  o.mização.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   15  

Page 16: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

o  Elimina  grande  parte  do  código  de  infraestrutura;  

o  Reduz  manutenção  por  alteração  nos  dados;  

o Maior  desempenho,  dado  o  foco  do  framework;  

o  Independência  de  fornecedor  de  BD.  

Vantagens  e  desvantagens  

•  Requerem  uma  curva  de  aprendizado;  

•  Para  serem  bem  usados,  requerem  conhecimento  de  SQL  e  BD  relacionais;  

•  Problemas  causados  por  seu  uso  são  mais  complexos;  

•  Não  se  aplicam  a  todas  as  situações.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   16  

Page 17: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Alguns  frameworks  ORM  para  Java  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   17  

E outros...

Page 18: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

O  padrão  Java  EE:  JPA  •  Java  Persistence  API;  •  Versão  atual:  2.0  (JSR  317);  •  Implementações:  

–  BatooJPA;  –  DataNucleus;  –  EclipseLink;  –  JBoss  Hibernate;  –  ObjectDB;  –  OpenJPA.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   18  

Page 19: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Exemplo:  uma  classe  com  JPA  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   19  

@Entity public class Funcionario { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;

@Version @Column(nullable = false) private Long version; private String nome; private String login; private String senha;

  @ElementCollection(fetch = FetchType.EAGER) private Set<Funcao> funcoes;   /* Getters e setters. */ }

Page 20: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Exemplo:  configuração  JPA  (EclipseLink)  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   20  

<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" ...> <persistence-unit name="SisContrAm-ejbPU" transaction-type="JTA"> <provider> org.eclipse.persistence.jpa.PersistenceProvider

</provider> <jta-data-source>SisContrAm-ds</jta-data-source> <properties> <property name="eclipselink.ddl-generation" value="create-tables"/> </properties>

</persistence-unit> </persistence>

Page 21: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Exemplo:  operações  nos  dados  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   21  

// Recuperando todos os objetos Funcionario. EntityManager em = /* Obtém o EM de alguma forma. */ CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); cq.select(cq.from(Funcionario.class)); return em.createQuery(cq).getResultList();

// Idem, utilizando JPQL. EntityManager em = /* Obtém o EM de alguma forma. */ Query q = em.createQuery("SELECT f FROM Funcionario f"); Return q.getResultList();

// Salvando um funcionário. Funcionario obj = /* Obtém o objeto de alguma forma. */ EntityManager em = /* Obtém o EM de alguma forma. */ em.persist(obj); // Excluindo um funcionário. Funcionario obj = /* Obtém o objeto de alguma forma. */ EntityManager em = /* Obtém o EM de alguma forma. */ em.remove(obj);

Page 22: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Objetos  de  Acesso  a  Dados  •  Data  Access  Object,  ou  DAO;  •  Classe  específica  para  operações  de  persistência:  

–  Salvar;  –  Excluir;  –  Recuperar  por  ID;  –  Listar  todos;  –  Pesquisar  com  filtro;  –  Etc.  

•  Separa  a  lógica  de  acesso  a  dados,  facilitando  a  manutenção  e  os  testes  unitários.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   22  

Page 23: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

INJEÇÃO  DE  DEPENDÊNCIAS  Projeto  de  Sistemas  com  Frameworks  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   23  

Page 24: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Ligação  entre  componentes  •  Modularidade  e  coesão:  caracterís.cas  desejadas;  •  Separação  de  responsabilidades:  

–  Lógica  de  negócio;  –  Acesso  a  dados;  –  Interface  gráfica  com  o  usuário;  –  Etc.  

•  Cria-­‐se  uma  cadeia  de  dependências:  

•  Problema:  como  conectar  as  dependências  mantendo  baixo  acoplamento  entre  as  camadas?  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   24  

Interface gráfica

Lógica de negócio

Aceso a dados

Envia entrada do usuário

Recupera/salva dados no BD

Page 25: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Primeiro:  programe  para  interfaces...  •  ...  e  não  para  implementações;  •  Para  um  baixo  acoplamento,  ao  usar  um  serviço:  

–  Precisamos  saber  os  parâmetros  a  fornecer  (pré-­‐condição);  –  Precisamos  saber  o  resultado  que  será  gerado  (pós-­‐condição);  –  Não  precisamos  saber  como  o  resultado  será  gerado.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   25  

Page 26: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Exemplo:  agência  de  viagens  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   26  

Parte gerenciada pelo controlador frontal (veremos a seguir)

Interface define os métodos de persistência disponíveis

Implementação não é acessada diretamente pela classe cliente.

Page 27: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Segundo:  inverta  o  controle  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   27  

•  Inversion  of  Control  (IoC);  •  Dependency  Injec.on  (DI).  

Page 28: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Alguns  frameworks  de  DI  para  Java  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   28  

Silk DI

PicoContainer

E outros...

Page 29: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

O  padrão  Java  EE:  CDI  •  Contexts  and  Dependency  Injec.on  for  the  Java  EE  plaxorm;  •  Versão  atual:  1.0  (JSR  299);  •  Implementações:  

–  Weld  (Seam  Framework);  –  Resin  CanDI;  –  Apache  OpenWebBeans.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   29  

Page 30: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Exemplo:  EJBs  e  CDI  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   30  

/* Arquivo: PacoteTuristicoDAO.java */ @Local public interface PacoteTuristicoDAO { long recuperarContagem(); List<PacoteTuristico> recuperarTodos();

List<PacoteTuristico> recuperarAlguns(int[] intervalo);   PacoteTuristico recuperarPorId(Long id);   PacoteTuristico salvar(PacoteTuristico objeto);   void excluir(PacoteTuristico objeto); }

/* Arquivo: PacoteTuristicoDAO.java */ @Stateless public class PacoteTuristicoDAOJPA2 implements PacoteTuristicoDAO { @PersistenceContext private EntityManager em;   /* Implementação dos métodos declarados na interface... */ }

Page 31: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Exemplo:  EJBs  e  CDI  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   31  

@Stateful @LocalBean @Model public class CadastrarPacotes { @EJB private PacoteTuristicoDAO pacoteTuristicoDAO;  

@Inject private Localizacao loc;   private List<PacoteTuristico> pacotes;   @Inject

void carregarPacotes() { pacotes = pacoteTuristicoDAO.recuperarTodos(); } /* Resto da classe... */ }

Page 32: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

CONTROLADORES  FRONTAIS  (MVC/WEB)  

Projeto  de  Sistemas  com  Frameworks  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   32  

Page 33: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Arquitetura  de  aplicações  Web  •  Web  =  protocolo  HTTP,  requisição/resposta;  •  Em  Java:  

–  Servlets  (classes):  inadequado  para  escrita  HTML;  

–  JSPs  (páginas):  inadequado  para  lógica  de  negócio.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   33  

response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.write("<html><head><title>Hello World</title></head>"); out.write("<body>" + new Date() + "</body></html>"); out.close();

<html>[...] <% Connection conn; PreparedStatement stmt; conn = BancoDados.conectar(); // [...] Lógica de negócio. %> [...]</html>

Page 34: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Modelo  2:  Front  Controller  •  Baseado  na  arquitetura  MVC  (Model-­‐View-­‐Controller).  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   34  

Lógica de apresentação (interface gráfica)

Page 35: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Alguns  frameworks  MVC  para  Java  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   35  

E outros...

Page 36: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

O  padrão  Java  EE:  JSF  •  JavaServer  Faces;  •  Versão  atual:  2.0  (JSR  314),  2.2  (JSR  344);  •  Implementações:  

–  Oracle  Mojarra;  –  Apache  MyFaces.  

•  Bibliotecas  de  componentes:  –  JBoss  RichFaces;  –  PrimeFaces;  –  ICEFaces;  –  OpenFaces;  –  Trinidad;  –  Tomahawk.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   36  

Page 37: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Exemplo:  formulário  JSF  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   37  

<h1>Cadastro</h1> <p>Entre seus dados para se cadastrar:</p> <h:form id=”frmCadastro"> <p>Nome: <h:inputText id="nome" value="#{acaoCadastro.usuario.nome}"

size="30" /></p> <p>Data de Nascimento: <h:inputText id=”dataNascimento" value="#{acaoCadastro.usuario.dataNascimento}" size="10"> <f:convertDateTime pattern="dd/MM/yyyy" /> </h:inputText></p>

<p>E-mail: <h:inputText id="email" value="#{acaoCadastro.usuario.email}" size="20" /></p> <p>Senha: <h:inputSecret id=”senha" value="#{acaoCadastro.usuario.senha}" size="20" /></p> <p><h:commandButton action="#{acaoCadastro.cadastrar}" value=”Cadastrar" /></p> </h:form>

Page 38: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Exemplo:  classe  de  ação  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   38  

@Named @SessionScoped public class AcaoCadastro { @EJB private AplCadastro aplCadastro;

private Usuario usuario = new Usuario(); private int idade; /* Getters para usuario e idade. */ public String cadastrar() {

try { aplCadastro.cadastrar(usuario); } catch (ExcecaoMenorDeIdade e) { idade = e.getIdade(); return "/cadastro/menorDeIdade.xhtml"; } return "/cadastro/sucesso.xhtml"; } }

Possui atributos nome, dataNascimento, email e senha.

Page 39: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Exemplo:  resultado  para  menores  de  idade  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   39  

<p>Preado(a) <h:outputText value="#{acaoCadastro.usuario.nome}" />, infelizmente nosso serviço está disponível somente para maiores de

idade e, de acordo com a data de nascimento fornecida, você possui apenas <h:outputText value="#{acaoCadastro.idade}" /> anos de idade.</p>

Page 40: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   40  

<html ...> #{acaoCadastro}

@Model public class AcaoCadastro { @EJB private AplCadastro

aplCadastro; }

public class Usuario { /* ... */ }

@Stateful @SessionScoped public class AplCadastro { @EJB private UsuarioDAO

usuarioDAO; }

@Stateless public class UsuarioDAOJPA { @PersistenceContext private EntityManager em; }

Request

Session Application

Juntando  MVC  +  DI  +  DAO/ORM  

Page 41: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

PROJETO  (DESIGN)  COM  FRAMEWORKS  

Projeto  de  Sistemas  com  Frameworks  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   41  

Page 42: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Frameworks  no  projeto  de  sistemas  •  Frameworks  são  muito  u.lizados  na  prá.ca;  •  Possuem  um  impacto  considerável  na  arquitetura  escolhida;  •  Inclui-­‐los  nos  modelos  de  projeto:  

–  Faz  os  modelos  ficarem  mais  próximos  da  implementação;  –  Programadores  tomam  menos  decisões;  –  Promove  uso  de  arquitetura  robusta;  –  Aumentam  a  produ.vidade  (com  padrões  de  bom  senso).  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   42  

Page 43: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

FrameWeb  •  Um  método  baseado  em  frameworks  para  o  projeto  de  

sistemas  de  informação  Web  (WIS);  –  Alguns  modelos  podem  servir  para  sistemas  não-­‐Web.  

•  Propostas:  –  Uma  arquitetura  padrão  para  WISs  baseados  em  frameworks;  –  Um  perfil  da  UML  para  construção  de  quatro  .pos  de  modelo:  

•  Modelo  de  domínio;  •  Modelo  de  persistência;  •  Modelo  de  navegação;  •  Modelo  de  aplicação.  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   43  

Page 44: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Arquitetura  base  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   44  

Page 45: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Modelo  de  domínio  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   45  

Page 46: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   46  

Modelo  de  persistência  

Page 47: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Modelo  de  persistência  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   47  

Page 48: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Modelo  de  navegação  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   48  

Page 49: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

Modelo  de  aplicação  

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   49  

Page 50: Projeto de Sistemas com Frameworks - inf.ufes.brvitorsouza/wp-content/uploads/teaching-br... · – JSF:"controlador"frontal;" – Facelets: ... • API"paraefe.vação"de"operações"

hHp://nemo.inf.ufes.br/  [email protected]  

 

Fevereiro  2012   Projeto  de  Sistemas  com  Frameworks   50