Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Informática para Internet / Desenvolvimento Web I / Aula
Para modelar o armazenamento dos livros disponíveis na livraria virtual, iremos utilizar uma abordagem em memória. Isso porque o foco do curso é ensinar as tecnologias web. Entretanto, é fortemente recomendado para os alunos que concluíram o módulo Banco de Dados, como atividade opcional, que usem banco de dados ao invés da abordagem em memória. Entretanto, essa implementação em banco de dados não pode interferir seu rendimento no curso, se possível, sendo realizada apenas ao final deste módulo.
Utilizaremos uma classe chamada Livraria para representar tanto as operações na livraria como o meio de armazenamento.
A primeira parte da implementação dessa classe é mostrada na Listagem 4.1 e é uma simplificação do que um sistema desenvolvido para o mercado pode possuir. A nossa implementação possui uma lista de objetos do tipo Livro (linha 18), representando o estoque existente na livraria virtual.
Como a nossa implementação é em memória, toda vez que o servidor é reiniciado, o estoque deve ser carregado na memória. Isso é feito pelo método popularLivros(), definido na linha 20. Esse método, executado logo quando o objeto Livraria é criado (linha 17), tem como objetivo criar alguns livros e inseri-los no estoque.
package livraria.negocio;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import livraria.negocio.excecoes.CompraException;
import livraria.negocio.excecoes.LivroNaoEncontradoException;
public class Livraria {
private List<Livro> estoqueLivros;
public Livraria() {
estoqueLivros = new ArrayList<Livro>();
popularLivros();
}
private void popularLivros() {
Livro livro = new Livro();
livro.setIdLivro("0596005407");
livro.setAno(2008);
livro.setTitulo("Head First Servlets and JSP");
livro.setDescricao("Livro sobre Servlets e JSP.");
livro.setAutores("Bryan Basham, Kathy Sierra, Bert Bates");
livro.setQuantidade(10);
livro.setPreco(200.5);
estoqueLivros.add(livro);
livro = new Livro();
livro.setIdLivro("9788573935721");
livro.setAno(2007);
livro.setTitulo("Desenvolvendo Aplicações Web com JSP, Servlets, "
+ "JavaServer Faces, Hibernate, EJB 3 Persistence e Ajax");
livro.setDescricao(
"Livro sobre tecnologias usadas na programação Java para Web.");
livro.setAutores("Edson Gonçalves");
livro.setQuantidade(10);
livro.setPreco(110.9);
estoqueLivros.add(livro);
}
}
Além disso, a classe Livraria deve possuir métodos de consulta aos livros disponíveis. Esses métodos são vistos na Listagem 4.2. O método getLivros() retorna todos os livros disponíveis.
Note que a implementação desse método faz uso da operação Collections.unmodifiableList().
Essa operação pega uma lista como parâmetro e retorna uma lista com os mesmos elementos, porém, seus métodos de modificação da lista (adicionar e remover) irão levantar uma exceção se executados. Isso é opcional, mas garante que apenas a lista original, guardada pela classe Livraria, poderá ser modificada. Essa garantia nos permite saber que apenas métodos da classe Livraria podem adicionar ou remover livros da lista, evitando que essas operações sejam executadas “sem querer” por outras partes do código que tiveram acesso a ela pelo método getLivros().
Outro método de busca disponível é o getLivro(), o qual recebe um código e retorna o livro relacionado àquele código (linhas 48 a 50) ou levanta a exceção LivroNaoEncontradoException (linhas 53 a 56), caso não exista no estoque nenhum livro com o código passado. Essa exceção foi definida por nós e seu código é visto mais adiante, na Listagem 5.
Versão 5.3 - Todos os Direitos reservados