Nos artigos anteriores, vimos como configurar um servidor MongoDB no Windows e no Ubuntu. Nesse artigo, iremos discutir a estrutura do projeto, escrever as classes Java e organiza-las em camadas.
Índice de conteúdo
- Parte 1: Introdução e Especificação funcional
- Parte 2: Configuração do MongoDB
- Parte 3: Classes Java
- Parte 4: Configuração dos arquivos XML
- Parte 5: Arquivos HTML Files (com AJAX)
- Parte 6: Executando a aplicação
Estrutura do projeto
Nossa aplicação será um projeto Maven e dessa forma seguirá a estrutura do Maven. A medida que criarmos as classes, iremos organiza-las em camadas lógicas: domínio, repositório, serviço e controlador.
Abaixo segue uma previsão da estrutura de nosso projeto:
As camadas
Camada do domínio
Essa camada possuirá duas classes, User e Role. Elas representam a nossas coleções no banco de dados, user e role, respectivamente. Usaremos o Spring Data MongoDB para simplificar o acesso ao MongoDB. E para otimizar essas classes ao framework, adicionaremos a anotação @Document. Se você for familiarizado com o JPS, essa anotação é similar a anotação @Entity.
Observe que a classe User possui uma referência a propriedade Role. Para que possamos conseguir isso, precisamos criar um anotação no campo com @DBRef.
Visão geral do mapeamento das anotações
- @Id – aplicado no nível do campo para marcar o campo usado para propósitos de identificação
- @Document – aplicado no nível da classe para indicar que essa classe é uma candidata a ser mapeada por um banco de dados. Você pode especificar o nome da coleção onde o banco de dados será armazenado.
- @DBRef – aplicado no nível do campo para indicar que ele deve ser armazenado usando com.mongodb.DBRef.
Fonte: http://static.springsource.org/spring-data/data-document/docs/current/reference/html/
Camada do controlador
Essa camada possui dois controladores, MediatorController e UserController
- MediatorController é responsável por redirecionar as requisições para as páginas apropriadas. Isso não é realmente necessário no nosso exemplo por propósitos de organização.
- UserController é responsável por manipular requisições relativas ao usuário como a adição e remoção de registros.
Camada de serviço
Essa camada possui dois serviços, UserService e InitMongoService
- UserService é nosso serviço de CRUD para a coleção user. Todos os acessos a dados são delegados aos repositórios
- InitMongoService é usado para inicializar nosso banco de dados com os dados de exemplo. Observe que estamos usando o próprio MongoTemplate ao invés do repositório baseado no Spring Data MongoDB. Não existe nenhuma diferença entre as duas opções. De fato, é mais simples usar o Spring Data. Mas escolhemos usar o MongoTemplate para mostrar uma maneira alternativa de interagir com o banco de dados
Nota
O framework de mapeamento não lida com salvamentos em cascara. Se você alterar um objeto Account que esteja referenciado por um objeto Person, precisa salvar o objeto Account separadamente. Chamar o método de salvamento do objeto Person não irá salvar automaticamente os objetos Account.
Fonte: Spring Data MongoDB Reference (7.3.3. Using DBRefs)
Camada de repositório
Essa camada possui dois repositórios, UserRepository and RoleRepository. Esses dois são nossos objetos de acesso aos dados (DAO). Com a ajuda do Spring Data MongoDB, o Spring fornecerá automaticamente a implementação atual. Observe os métodos personalizados que temos que adicionar para adicionar uma assinatura ao método.
O que é o Spring Data MongoDB?
O Spring Data for MongoDB é uma parte do projeto Spring Data project cujo objetivo é fornecer um modelo familiar e consistente baseado no Spring para novos armazéns de dados enquanto retem recursos de armazenamento específicos. O projeto Spring Data MongoDB fornece integração com o documento de banco de dados do MongoDB. Áreas chaves funcionais do Spring Data MOngoDB são o modelo centrado no POJO para interagir com um DBCollection do MongoDB e fácil escrita de uma camada de acesso a dados no estilo Repositório
Fonte: http://www.springsource.org/spring-data/mongodb
Classes utilitárias
A classe TraceInterceptor é classe utilitária baseado no AOP para nos ajudar a depurar a aplicação. Essa classe é uma sub-classe de CustomizableTraceInterceptor (veja Spring Data JPA FAQ para obter mais detalhes)
Fonte
- http://krams915.blogspot.com.br/2012/01/spring-mvc-31-implement-crud-with_7897.html