Voooolta, volta volta volta! :D
Se voce esta usando o Hibernate (ou outro mapeador Objeto-Relacional), vc nao tem que pensar nas tabelas, vc tem que pensar nos objetos. Entao esqueca que existe um banco de dados enquanto vc estiver fazendo a modelagem, e deixe as coisas o mais OO possivel ;)
Resumo da opera, aqui vai um trechinho do que passou pela cabeca esquizofrenica do cv (nao a minha, a do cv!):
- Ei, preciso de um objeto pra representar clientes.
- Tah, q q o cliente tem?
- Nome, endereco, telefone e e-mail.
- E o que a gente pode pedir pra ele fazer?
- Bom, ele consegue se logar, deslogar, adiciona comentarios aos produtos, compra coisas, e pode enviar comentarios direto pra gente.
- Legal. Dah uma olhada nisso aqui entao e ve se eh o que vc quer:
public class Cliente implements java.io.Serializable {
private boolean logado = false;
private String nome = "";
private String endereco = "";
private String telefone = "";
private String email = "";
public void logar() {
...
}
public void deslogar() {
...
}
public void comentarProduto(String comentario, Produto produto) {
...
}
public void comprarProduto(Produto produto) {
...
}
public void comentar(String comentario) {
...
}
// getters e setters pros atributos
}
- Show! Agora eh soh fazer um JUnit pra ter sempre como acompanhar esse codigo aqui. Vou usar o wizard babinha do Eclipse pra isso, segura um pouco.
- Tah...
- Mas, erhm... como eu salvo um objeto desses? Se a aplicacao cair eu fico sem os dados...
- Ah eh... Prevayler ou Hibernate?
- Hibernate! O chefe nao gosta de Prevayler.
- Tah. Pega o XDoclet, monta um script Ant que faz a papagaiada toda com o HibernateDoclet e me chama. Vou tomar um cafe...
- Beleza.
(algum tempo depois...)
- E ai?
- Pronto! So tem um problema, quem cuida de salvar e pegar esses clientes?
- E se a gente fizesse um DAO?
- DAO? Credo, c tah fora de moda mesmo. Nao eh mais DAO que se chama o pattern. Eh Table Data Gateway. Burro.
- Ah eh. Bom, e se a gente fizesse um TDG?
- Boa. Vamo lah:
public class ClientesTDG {
public Cliente[] pegaCliente() {
...
}
public Cliente[] pegaCliente(String nome) {
...
}
public boolean apagaCliente(Cliente cliente) {
...
}
public boolean alteraCliente(Cliente cliente) {
...
}
}
- Perae. Nao ficou faltando alguma coisa, nao?
- Hmm... verdade. As Exceptions! Vou adicionar os throws aqui.
- Boa! Acho que eh isso, nao?
- Nao sei ueh, pergunta pro codigo, nao pra mim! Roda o JUnit. :D
PS: Foi mal. Esse post tah ridiculo. Sushi me deixa criativo demais, e botaram alguma coisa naquele shoyu.