Integrantes
- Gustavo Ansaldi Oliva
- Straus Michalsky Martins
Descrição
Através de uma interface WEB, o sistema permitirá que os usuários cadastrados criem álbuns de foto e os compartilhem segundo níveis de privacidade (políticas de visibilidade). Ademais, usuários não cadastrados (visitantes) poderão visualizar quaisquer álbuns que tenham sido marcados com a política de visibilidade "pública".
Objetivo Geral
- Permitir que os usuários possam armazenar, compartilhar e buscar fotos de forma fácil e intuitiva.
Objetivos Especifico
- Realizar o upload de fotos
- Realizar tagging das fotos
- Possibilitar marcação das pessoas nas fotos
- Incluir comentários em fotos
- Realizar busca de fotos
- Manter álbuns de fotos
- Atribuir políticas de visibilidade para os álbuns
- Manter cadastro de usuários
- Fazer o relacionamento entre usuários através de grupos de classificação
- Possibilitar a exploração de álbuns públicos para visitantes
Gustavo Ansaldi Oliva
Straus M. Martins
Favor enviar os fontes também...
Os fontes estão incluídos no .WAR (que pode ser aberto pelo 7ZIP ou qualquer outro compressor/descompressor de arquivos .ZIP).
O caminho para os fontes e as classes é: PictWare.war\WEB-INF\classes\[pacotes]
Qualquer problema eu posso postar os sources em um arquivo separado.
Abraços
Segue um script sql para criação das tabelas do banco (gerei pelo próprio Database Explorer do Eclipse Ganymede). Não cheguei a testar em um BD mySQL. Alternativamente, você pode instalar a versão gratuita do DB2 disponibilizada em http://www-01.ibm.com/software/data/db2/express/
É possível também configurar o Tomcat (versão 6) para acessar remotamente o BD instalado na minha máquina (DB2). Caso opte por este acesso remoto, me avise e eu crio um usuário pra vc.
Abraços,
Funcionalidades não desenvolvidas:
- Detalhes Foto (tag, local)
- Grupo Acesso
- "Abandonar" Pictware (cancelar a assinatura)
- Busca
Ainda em desenvolvimento/teste:
- Tratamento sessão (login/logout)
- Mensagens erro ao usuário
Tirando esses pontos acredito que o resto esteja ok. Já estamos desenvolvendo estas funcionalidades e fazendo mais testes para podermos entregar na proxima versão do sistema, junto com as alterações que serão apontadas por vcs.
Qualquer duvida só perguntar =)
abraços
Abraços
Segue em anexo a avaliação do sistema, segundo os critérios sugeridos pelo professor.
Cláudia e Rosi.
Segue a nossa avaliação:
Análise: 10,0
- O sistema implementa as funcionalidades propostas nos diagramas de caso de uso e segue a estrutura do diagrama de classes UML.
Interface com usuário: 10,0
- Interface com o usuário bem elaborada.
Arquitetura: 10,0
- Possui uma boa arquitetura em camadas, implementa padrões de projeto como FrontController, DAOFactory, etc.
Legibilidade: 10,0
- Código bem legível.
Corretude: 8,5
- O Sistema ignora exceções em algumas camadas, devolvendo null ou imprimindo o stacktrace. Sugiro a criação de exceções wrapper do tipo RuntimeException e logar a ocorrência da exceção.
- Apesar da implementação utilizando diretórios JNDI ser interessante, o código de para abrir a conexão (openConnection) se repete nas classes de implementação dos DAO's. Acho interessante a criação de uma superclasse de base para os DAO's incorporando código repetido.
Funcionalidade: 10,0
- Fácil de usar.
Nota Final: 9,75
Abraço,
Diogo
- Argumentando sobre o review da Cláudia Abrão:
Uma dúvida surgiu após analizarmos a estrutura de pacotes: Por que separar em pacotes diferentes as classes referentes ao DAO e ao JDBC se estas são responsáveis pela comunicação com o banco de dados? Poderia facilitar o entendimento, se as duas estivessem no mesmo pacote. Ficou um pouco estranho ter uma classe por pacote.
As interfaces DAO estão em pacotes diferentes das classes que as implementam por dois motivos:
-
Conceitualmente, faz sentido que as interfaces DAO fiquem na camada de negócio, já que podemos encarar estas como abstrações de Repositórios. O paradigma de design conhecido por Domain-Driven-Design (http://domaindrivendesign.org/), criado por Eric Evans, também compartilha desta mesma idéia.
-
Evitar dependência cíclica entre pacotes. Caso as interfaces DAO estivessem na mesma camada das classes que as implementam, existiria uma dependência cíclica entre a camada de business e a camada de infraestrutura. Dependências cíclicas diminuem consideravelmente o grau de reuso de componentes e tornam o sistema mais complicado de ser testado.
Na estrutura definida pelo grupo, não fica claro onde está a classe de acesso ao banco de dados. Pesquisando nas classes, percebemos que a conexão com o banco é aberta em várias classes. Isso deixa o código confuso, uma sugestão seria criar uma única classe para acessar o banco de dados e as demais classes apenas extenderiam essa classe.
As classes de acesso ao banco de dados estão na camada de infraestrutura. Quanto ao código duplicado você tem toda razão (corrigimos isto).
Talvez por falta de tempo, ficou faltando a explicação da estrutura do código. Acreditamos que um documento com esta explicação facilitaria a compreensão do sistema.
Boa sugestão Cláudia. Em breve, disponibilizaremos um README com instruções para instalação da aplicação e um breve documento de arquitetura.
- Argumentando sobre o review do Diogo Vernier:
O Sistema ignora exceções em algumas camadas, devolvendo null ou imprimindo o stacktrace. Sugiro a criação de exceções wrapper do tipo RuntimeException e logar a ocorrência da exceção.
Você tem toda razão Diogo. Contudo, por se tratar de um protótipo, preferimos nos concentrarmos em outros pontos e não implementamos um mecanismo de tratamento de exceções e nem logging. Nesta versão corrigida, implementamos um log simples. Provavelmente implementaremos tratamento de exceções e validações de campo quando utilizarmos Struts.
Apesar da implementação utilizando diretórios JNDI ser interessante, o código de para abrir a conexão (openConnection) se repete nas classes de implementação dos DAO's. Acho interessante a criação de uma superclasse de base para os DAO's incorporando código repetido.
Este foi o mesmo ponto apontado pela Cláudia. Corrigimos isto.
********************************************************************************
Segue anexo a nova versão
Abraços!
Obrigado
Muito saudável a discussão entre os autores e revisores. As revisões foram muito boas, não vi nada a acrescentar. O sistema está bem implementado. Só achei um pouco confuso (demora um tempo para entender) a distrubuição de pacotes. Talvez há um excesso de generalização.