Você está na página 1de 34







• O arquiteto de software deve ter uma visão sistêmica do sistema;

• A visão sistêmica consiste na habilidade em compreender os sistemas de acordo com a


abordagem da Teoria Geral dos Sistemas, ou seja, ter o conhecimento do todo, de
modo a permitir a análise ou a interferência no mesmo;
• Arquitetura de software refere-se à “estrutura global do software e aos modelos pelos
quais essa estrutura fornece integridade conceitual para um sistema”;

• É a estrutura ou organização dos componentes de software, o modo pelo qual estes


componentes interagem e as estruturas dos dados que são usadas pelos componentes;
• Um sistema em N camadas é um software desenvolvido de forma a ter várias camadas
lógicas. Cada camada é modularizada - de acordo com sua responsabilidade - o
suficiente de forma que a aplicação possa ser até mesmo dividida em vários
computadores em uma rede distribuída;
• A forma mais comum (clássica) da arquitetura em camadas é a divisão em três
camadas(3-Tier), na qual existem as camadas de interface com o usuário, aplicação
e banco de dados;
DESIGN PATTERNS
• Um Design Pattern (padrão de projeto) é uma solução
comum para um problema encontrado no
desenvolvimento de software;

• Não está vinculado à nenhuma linguagem OO


específica;

• A sedimentação deste conceito veio com o lançamento


do livro: Design Patterns: Elements of Reusable Object-
Oriented Software;
• A utilização destes padrões usualmente implica em algumas vantagens:
- Facilidade de comunicação
- Os padrões possuem nomes, os quais resumem uma solução que deve ser de
conhecimento comum entre equipes de desenvolvimento;
- Credibilidade
- A implementação estará utilizando soluções amplamente testadas e aprovadas;
- Facilidade de manutenção
- Padrões tendem a reduzir o acoplamento entre componentes, o que implica num
sistema de fácil manutenção;
SINGLETON
• O objetivo é gerar SOMENTE UMA instância da classe. Essa classe deve possuir:
• Apenas uma instância da classe;
• Um único construtor privado;
• Um método que retorne a instância da classe;
public class ConnectionManager {

private static ConnectionManager instance;

private ConnectionManager() {}

public static ConnectionManager getInstance() {


if (instance == null)
instance = new ConnectionManager();
return instance;
}

public Connection getConnection() {


//Implementação...
}

}
public class OracleLivroDAO implements LivroDAO {

public List<LivroTO> listar() {


Connection conn = ConnectionManager.getInstance().getConnection();
//Implementação...
}

public void inserir(LivroTO livro) {


Connection conn = ConnectionManager.getInstance().getConnection();
//Implementação...
}

}
TRANSFER OBJECT
• Também conhecido como DTO (Data Transfer Objects) ou, antigamente, VO (Value
Objects).

• Realmente necessário quando é utilizada a troca de informações entre máquina


distintas;

• Evita que se faça diversas chamada a um objeto (que poderia ser remoto) para
recuperar valores de atributos um a um. Com o padrão TO, todas as propriedades são
retornadas em um objeto;

• É comum utilizar o conceito de JavaBeans (como conhecido atualmente) para


implementar este design pattern;
• Assumiremos o seguinte padrão para criar uma classe TO:
- Uma classe TO para cada entidade de nossa aplicação;
- Dentro da classe, todas as propriedades da nossa entidade serão privadas;
- Existirão métodos getters e setters para cada uma das propriedades;
- Para propriedades lógicas, pode-se utilizar o prefixo is em vez de get (Ex: isAtivo);
- Utilizar construtor sem argumentos - não precisa criar explicitamente;
- Toda a comunicação entre as classes de negócio e as classes de acesso a base de dados será
feita utilizando as classes TO;

• É aconselha-se criar as classes TO para todas as entidades do projeto e agrupa-las num pacote,
exemplos: br.com.fiap.projeto.to ou br.com. fiap.projeto.entidades.
import java.io.Serializable;

public class LivroTO implements Serializable {

private int isbn;


private String titulo;

public int getIsbn() {


return isbn;
}

public void setIsbn(int isbn) {


this.isbn = isbn;
}

public String getTitulo() {


return titulo;
}

public void setTitulo(String titulo) {


this.titulo = titulo;
}
}
DATA ACCESS OBJECT
• Abstrai e encapsula todos os acessos à base de dados. O DAO gerencia a conexão com
a fonte de dados para obter e armazenar os dados;

• Vários níveis de flexibilidade/complexidade diferentes podem ser aplicados em um


projeto;

• A ideia básica é separar totalmente o mecanismo de acesso a dados do resto da


aplicação;

• Assim, cria-se um objeto DAO para cada uma das entidades do projeto encapsulando
nele os métodos de manipulação dos dados CRUD (Create, Read, Updade e Delete);
public class LivroDAO {

public List<Livro> listar(){


//Implementação..
}

public void inserir(Livro livro) {


//Implementação..
}

public class LivroBo {

private LivroDAO dao = new LivroDAO();


Como utilizar public List<Livro> listar(){
return dao.listar();
}

}
public interface LivroDAO {

List<Livro> listar();
void inserir(Livro livro);

public class OracleLivroDAO implements LivroDAO {

@Override
public List<Livro> listar() {
// Implementação..
}

@Override
public void inserir(Livro livro) {
// Implementação..
}

}
public class LivroBo {

private LivroDAO dao = new OracleLivroDAO();

public List<Livro> listar(){


return dao.listar();
}

}
public class OracleLivroDAO implements LivroDAO {

public List<Livro> listar() throws SQLException {


// Implementação..
}

public void inserir(Livro livro) throws SQLException {


// Implementação..
}

public void atualizar(Livro livro) throws SQLException {


//Implementação
}

public void excluir(int id) throws SQLException {


//Implementação
}

public Livro pesquisar(int id) throws SQLException {


//Implementação
}

}
DAO FACTORY
• Utilizado quando o repositório de dados não está sujeito a mudanças frequentes. Trata-
se de uma fábrica de DAOs para um tipo específico de repositório de dados;

Cenário de Exemplo:

• Determinada instituição utiliza somente banco de dados Oracle e não existe previsão de
mudança. Não é conveniente criar uma estrutura complexa, somente pela possiblidade
de suportar diversos tipos de banco de dados, tendo em vista que não há previsão de
mudança do atual.
public class OracleLivroDAO implements LivroDAO {

public interface LivroDAO { public List<LivroTO> listar() {


//Implementação...
List<LivroTO> listar(); }
void inserir(LivroTO livro);
public void inserir(LivroTO livro) {
} //Implementação...
}

public interface CategoriaDAO {


List<CategoriaTO> listar();
}
public class OracleCategoriaDAO implements CategoriaDAO {

public List<CategoriaTO> listar() {


//Implementação
}

}
public abstract class DAOFactory {

public static LivroDAO getLivroDAO() {


return new OracleLivroDAO();
}

public static CategoriaDAO getCategoriaDAO() {


return new OracleCategoriaDAO();
}

public class LivroBo {

private LivroDAO dao = DAOFactory.getLivroDAO();

public List<Livro> listar(){


return dao.listar();
}

}
“O que a pessoa pensa a respeito de si mesmo indica o seu destino”.
(Henry David Thoreau, adaptado)

Você também pode gostar