Olá pessoal!
Sou novo por aqui e estou começando a desenvolver em Java.
Às vezes me pego perdendo muito tempo tentando entender os Design Patterns. Sou bastante perfeccionista e gostaria de seguir exatamente os conceitos. Só que não consigo sair do lugar pois sempre fico pensando se estou fazendo da forma correta.
A grande dúvida agora é com o Data Access Object.
Eu aprendi que, normalmente, é criado uma classe DAO para cada classe, como: ClienteDAO, ParceiroDAO, etc. Só que eu ouvi falar em DAO genérico e achei bastante interessante. Então, fiz uma interface de DAO genérica com métodos básicos do tipo: list, create, remove, update. E tenho uma classe Database. E uma interface DatabasePostgres. E, é claro, a classe model Cliente.
O problema agora é na hora de implementar tudo isso. O que devo fazer? Mesmo tento uma interface de DAO genérica, ainda preciso ter uma classe ClienteDAO que implementa esta interface, certo? Mas sendo assim, porque criar uma interface genérica? O que isso me traz de bom? E a classe Database? Ela deve ser uma subclasse de ClienteDAO ou ser uma instância?
Eu me perco nos conceitos, na forma como devo implementar cada um, a ordem, etc.
Por favor, vejam as classes abaixo. Estou usando os conceitos corretamente. Acho que a parte do banco não está ok. Não sei se devo criar uma interface para cada banco de dados e ainda por cima usar constantes. Isso me lembra muito linguagem procedimental. Posso estar falando besteira também …
- Cliente.java
public class Cliente {
private String name;
private String email;
private String login;
private String senha;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String toString(){
StringBuffer res = new StringBuffer();
res.append( "Nome: " + this.getName() + "\n" );
res.append( "Email: " + this.getEmail() + "\n" );
res.append( "Login: " + this.getLogin() + "\n" );
res.append( "Senha: " + this.getSenha() );
String rs = res.toString();
return rs;
}
}
DAO.java
public interface DAO<Object>{
public void list();
public Object create( Object o );
public void remove( Object o );
public void update( Object o );
}
- ClienteDAO.java
public class ClienteDAO implements DAO{
String tablename = "cliente";
public Object create(Object object) {
return object;
}
public void remove(Object object) {
// TODO Auto-generated method stub
}
public void update(Object object) {
// TODO Auto-generated method stub
}
public void list() {
// TODO Auto-generated method stub
}
}
- Database.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Database implements DatabasePostgres{
Connection con = null;
Statement stm = null;
ResultSet res = null;
public Connection getConnection(){
if( con != null ){
return con;
}
String url = JDBC_NAME + "://" + DB_HOST + "." + DB_PORT + "/" + DB_NAME;
try {
Class.forName( DRIVER_NAME );
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection( url, DB_USER, DB_PASS );
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
public void closeConnection(){
if( con != null ){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public ResultSet executeQuery( String sql ){
Connection con = this.getConnection();
try {
stm = con.createStatement();
res = stm.executeQuery( sql );
} catch (SQLException e) {
e.printStackTrace();
}
this.closeConnection();
return res;
}
}
- DatabasePostgres.java
import java.sql.*;
public interface DatabasePostgres{
static final String DB_HOST = "10.0.0.0";
static final String DB_PORT = "5432";
static final String DB_USER = "postgres";
static final String DB_PASS = "postgres";
static final String DB_NAME = "db_cliente";
static final String JDBC_NAME = "jdbc:postgresql";
static final String DRIVER_NAME = "org.postgresql.Driver";
Connection getConnection() throws ClassNotFoundException, SQLException;
void closeConnection() throws SQLException;
ResultSet executeQuery( String sql ) throws SQLException;
}
Agradeço quem puder me ajudar!
Obrigado!