estou desenvolvendo uma agenda, em java, pois estou iniciando na linguagem.
pensei em criar as seguintes classes:
Pessoa -> terá os dados dos contatos da agenda
BancoDados -> conecta e fecha a conexão ao banco de dados
Agenda -> funcionalidades da agenda como inserir um contato, apagar um contato. esta, extende a BancoDados
mas depois, pensei em criar um método dentro de agenda, para conectar ao banco de dados, e nao criar uma classe BancoDados
minha pergunta é:
neste caso, qual seria a melhor estruturação das classes?
alguma das 2 maneiras que citei, ou outra?
Então Juliano, as duas formas são válidas. Tudo é válido, desde que funcione.
Tem uma classe que cuida só do banco é interessante, principalmente se você tiver mais de uma classe q acesse o banco. Sendo assim, é realmente interessante tem uma classe só para o banco, por 2 motivos:
1- Esse é a idéia qdo se cria uma classe. Que cada classe tenha UMA função específica.
2- Você não sabe quanto essa sua agenda pode crescer e agregar funcionalidades. Entao, ter um esquema de classes bem montado, irá facilitar isso.
Mas, se isso é apenas um teste, onde a única coisa que você quer aprender é programar em Java, e além disso, quer algo que seja além de tudo, simples de entender, entao nao há problema em fazer isso tudo em uma unica classe.
ok?
G
Guilherme_MelloPJ
“julioromano”:
estou desenvolvendo uma agenda, em java, pois estou iniciando na linguagem.
pensei em criar as seguintes classes:
Pessoa -> terá os dados dos contatos da agenda
BancoDados -> conecta e fecha a conexão ao banco de dados
Agenda -> funcionalidades da agenda como inserir um contato, apagar um contato. esta, extende a BancoDados
mas depois, pensei em criar um método dentro de agenda, para conectar ao banco de dados, e nao criar uma classe BancoDados
minha pergunta é:
neste caso, qual seria a melhor estruturação das classes?
alguma das 2 maneiras que citei, ou outra?
grato
Julio Romano
Fala romano…
Não é uma boa você ter uma classe mãe responsável por abrir e fechar as conexões. O ideal é você ter uma classe que te retorne apenas uma instância do objeto Connection pré-configurada. Dê uma olhada no design pattern Singleton.
A sua classe Agenda teria que ser um DAO, que tem a responsabilidade de isolar todo acesso a dados (operações CRUD, etc…).
packageagenda;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.util.Properties;publicclassBancoDados{privatestaticBancoDadosinstancia;privateConnectionconnection;privateBancoDados(){System.out.println("aasasas");try{Propertiesp=newProperties();p.put("user","root");p.put("password","");p.put("useUnicode","true");p.put("characterEncoding","UTF-8");//conectaStringdriverName="org.gjt.mm.mysql.Driver";Class.forName(driverName);StringserverName="localhost";StringdataBase="agenda";Stringurl="jdbc:mysql://"+serverName+"/"+dataBase;connection=DriverManager.getConnection(url,p);}catch(ClassNotFoundExceptione){System.out.println("O driver expecificado não foi encontrado.");}catch(SQLExceptione){System.out.println("Não foi possível conectar ao Banco de Dados");}}publicsynchronizedstaticBancoDadosgetInstance(){if(instancia==null)instancia=newBancoDados();returninstancia;}publicConnectiongetConnection(){returnconnection;}publicvoiddesconecta(Connectioncon){if(con!=null){try{con.close();}catch(SQLExceptione){System.out.println("Nenhuma conexão ao banco de dados estava aberta.");}}}}
Agenda.class:
packageagenda;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.ArrayList;publicclassAgenda{BancoDadosbd=BancoDados.getInstance();privateArrayList<Pessoa>contatos=newArrayList<Pessoa>();publicArrayList<Pessoa>buscaContatos(){try{Statementstm=bd.getConnection().createStatement();Stringquery="select * from contatos";ResultSetrs=stm.executeQuery(query);while(rs.next())contatos.add(newPessoa(rs.getString("nome"),rs.getString("fone"),rs.getString("email")));}catch(SQLExceptione){System.out.println(e.getMessage());}returncontatos;}}
seria assim mesmo?
ou eu nao entendi direito?
grato pela atençao
G
Guilherme_MelloPJ
Romano, desse jeito tá legal… tem algumas coisas para modificar, mas só aumentaria a complexidade. Mantenha o foco nesse modelo e com o tempo você poderá ir adicionando outras coisas.