Apresentação do PowerPoint

Propaganda
Patterns

Não existe uma definição exata para o que são patterns. O
autor Martin Fowler, define patterns como uma idéia que
foi útil em um contexto prático e que provavelmente será
útil em outros. Outros autores definem como uma regra
que expressa uma relação entre um contexto, um
problema e uma solução. Mas em geral, patterns tem
sempre as seguintes características:
 são notados através da experiência;
 evitam que se reinvente a roda;
 existem em diferentes níveis de abstração;
 são artefatos reutilizáveis;
 passam aos desenvolvedores designs corretos e podem
ser combinados para resolver um grande problema;
 aceitam melhoramentos contínuos.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
Pattern Data Access Object (DAO)

Objetivo

Abstrair e encapsular todo o acesso a
uma fonte de dados.

O DAO gerencia a conexão com a fonte
de dados para obter e armazenar os
dados.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
Pattern Data Access Object (DAO)


O padrão Data Access Object , também conhecido
como o padrão DAO, abstrai a recuperação dos
dados tal como uma base de dados. O conceito é
"separar a relação do cliente de um recurso dos
dados de seu mecanismo de acesso dos dados.“
O DAO é utilizado para encaplusar a lógica de
acesso a dados. Assim, se for necessário a
alteração de banco de dados, não é necessário
alterar todo sistema, mas somente os DAOs.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
Pattern Data Access Object (DAO)


Dentro do DAO são realizadas as querys ou o acesso aos
métodos do Hibernate ou direto a Base de Dados. A
intenção real de existência dos DAOs é que eles não
possuam nenhuma lógica de negócio, apesar de algumas
vezes ser necessário encaplusar algo dentro deles,
especialmente quando outros patterns da camada de
modelo não estão presentes.
Quando utilizado junto com Hibernate, ambos realizam o
trabalho de abstrair a base, pois o Hibernate já mascara o
tipo do banco de dados, ficando para o DAO a parte de
controlar as conexões, excessões, retornos para os níveis
superiores, entre outros.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
Problema (DAO)

Forma de acesso aos dados varia
consideravelmente dependendo
da fonte de dados usado




Banco de dados relacional
Arquivos (XML, CSV, texto,
formatos proprietários)
LDAP
Persistência de objetos depende
de integração com fonte de dados
(ex: business objects)


Colocar código de persistência
(ex: JDBC) diretamente no código
do objeto que o utiliza ou do
cliente
amarra
o
código
desnecessariamente à forma de
implementação
Ex: difícil passar a persistir
objetos em XML, LDAP, etc.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
Solução (DAO)

Data Access Object (DAO) oferece
uma interface comum de acesso a
dados
e
esconde
as
características
de
uma
implementação específica




Uma API: métodos genéricos
para ler e gravar informação
Métodos
genéricos
para
concentrar
operações
mais
comuns (simplificar a interface de
acesso)
DAO define uma interface que
pode ser implementada para cada
nova fonte de dados usada,
viabilizando a substituição de uma
implementação por outra
DAOs não mantêm estado nem
cache de dados
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
UML (DAO)





Client: objeto que requer acesso a dados: Business Object, Session
Façade, Application Service, Value List Handler, ...
DAO: esconde detalhes da fonte de dados
DataSource: implementação da fonte de dados
Data: objeto de transferência usado para retornar dados ao cliente.
Poderia também ser usado para receber dados.
ResultSet: resultados de uma pesquisa no banco
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
Exemplo - UML (DAO)
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
Diagrama de Sequência (DAO)
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
Exemplo - Data Access Object (DAO)
public class MeuDAO implements DAO{
public interface DAO{
public void insert(Object o);
// construtor e outras coisas aqui...
public void update(Object o);
public void insert(Object o){
public void delete(Object o);
// implementa o método insert
public List listAll();
}
}
public void update(Object o){
// implementa o método update
}
public void delete(Object o){
// implementa o método delete
}
public List listAll(String sNome){
// implementa o método listAll
}
}
O interessante da Classe DAO é que você podem implementar o acesso aos
Dados da forma que achar mais estratégica.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
DTO – Data Tranfer Object

DTO == TO ~= VO



DTO = Data Transfer Object (Fowler)
VO = Value Object (CoreJ2EEPatterns 1ed)
TO = Transfer Object (CoreJ2EEPatterns 2ed)
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
DTO – Data Tranfer Object


O termo VO foi abandonado pelos autores de Core J2EE Patterns
porque já era usado para outra coisa, algo do tipo "objeto imutável
que representa um valor, não uma instância".
TOs são usados para transporte de dados entre camadas. No seu
exemplo, pessoa seria um TO. Basicamente, TOs são objetos que
contém apenas dados, isto é, não têm lógica nenhuma, apenas
métodos get/set dos seus atributos.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
DTO – Data Tranfer Object


TOs foram "introduzidos" no livro CoreJ2EEPatterns, para superar o
problema de tranferência de dados entre camadas (Servlets <=>
EJBs), pois na primeira edição eles implicitamente recomendavam a
distribuição dos objetos (como se baseava na especificacao antiga,
todos os EJBs eram remotos, não existiam interfaces locais). É mais
eficiente transportar um objeto com um conjunto de dados agregados
do que fazer várias chamadas, uma para cada dado.
O padrão também é usado para agregar os dados logicamente.
Imagine ter que passar sempre todos os atributos separados nas
chamadas de métodos de negócio (métodos com 20 parâmetros?)
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
DTO – Data Tranfer Object



Os DAOs também usam DTOs para encapsular um conjunto de dados
em um único objeto. Tente imaginar alguma outra coisa... tipo,
retornar uma HashMap... horrível, pra todos os casos que eu consigo
imaginar.
Um DTO normalmente é um bean, mas um bean pode ser qualquer
coisa, inclusive um DTO. Por exemplo, no Spring, os componentes que
guardam a lógica de negócio são implementados como beans, com
suas dependências "injetadas" através dos métodos set. Mas eles não
são DTOs, pois a intenção deles não é transportar dados.
JavaBeans são apenas componentes que seguem certas convenções,
como ser Serializable e usar métodos get/set. Um DTO é um objeto
que carrega dados, que normalmente é implementado como um
Javabean.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
Exemplo - (DTO) de uma entidade - tbPessoa
public class tbPessoaDTO {
private int codigo;
private String nome;
private String bairro;
public tbPessoaDTO(int codigo, String nome, String bairro){
this.codigo=codigo;
this.nome = nome;
this.bairro=bairro;
}
public int getCodigo() {
return codigo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
Get´s e Set´s dos atributos da tabela.
}
public String getBairro() {
return bairro;
Uma representação Vazia de uma
}
entidade do Banco
public void setBairro(String bairro) {
this.bairro = bairro;
}
}
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
Exemplo – Um método de uma classe DAO que
envia para a View uma Coleção de DTO-tbPessoa
View Solicita uma Lista
1ª
ao Bean
Envia para camada View
um Lista de DTO´s
public Collection getListanomes() {
AcessoDAO dao = new meuDAO();
listanomes = (List) dao.listAll(nome);
return listanomes;
4ª
}
Bean
2ª
public Collection listAll(String sNome){
String sql = "SELECT CODIGO, Nome, BAIRRO FROM tbPessoa WHERE Nome like ?";
List retorno = new ArrayList();
startConnection();
try{
PreparedStatement pst = connection.prepareStatement( sql );
pst.setString(1, "%" + sNome + "%");
ResultSet rs = pst.executeQuery();
DAO
while( rs.next() ) {
retorno.add(new tbPessoaDTO(rs.getInt("CODIGO"),
rs.getString("NOME"),
rs.getString("BAIRRO") ) );
}
rs.close();
Carrega uma lista com vários
pst.close();
DTO´s, contendo os atributos e
}
seus conteúdos do Resultset
catch ( SQLException e){
System.err.println ("\nError Menssage: " + e.getMessage());
}
destroyConnection();
3ª
return retorno;
}
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
Exemplo – Um método de uma classe DAO que
envia para a View uma Coleção de DTO-tbPessoa
Na View é invocada uma propriedade de um BEAN que recebe uma Lista carregada com DTO´s,
restando agora apresentar o conteúdo desta lista em uma TABLE HTML.
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
..........
<jsp:useBean id="meuBean" class="FJA.BeanTESTE" />
<jsp:setProperty name="meuBean" property="*" />
<table border=1 style="font-family: MS Sans Serif; font-size: 9px" >
<thead>
<tr>
<th>Código</th> <th>Nome</th> <th>Bairro</th>
</tr>
</thead>
<tbody>
<c:forEach var="lista" items="${meuBean.listanomes}" >
<tr>
<td> <c:out value="${lista.codigo}"></c:out> </td>
<td> <c:out value="${lista.nome}"></c:out> </td>
<td> <c:out value="${lista.bairro}"></c:out>) </td>
</tr>
</c:forEach>
</tbody>
</table>
São os atributos definidos no DTO
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
Download