Galera, antes mesmo de procurar sobre esse padrão, eu faço minhas camadas de negócio da seguinte maneira:
Bom, vou mostrar um exemplo simples de como as camadas estão se conectando no meu projeto:
Primeiro, tenho a camada de domínio:
public class DOCliente {
private Long ID;
private String nome;
// getters e setters omitidos.
@Override public void toString() {
return getNome();
}
}
Tenho minha camada de Persistência:
public abstract class DAOBase {
private Connection currentConnection;
public Connection getCurrentConnection() {
return currentConnection;
}
public void setCurrentConnection(Connection currentConnection) {
this.currentConnection = currentConnection;
}
public DAOBase(Connection currentConnection) {
setConnection(currentConnection);
}
}
public class DAOCliente extends DAOBase {
public DAOCliente(Connection currentConnection) {
super(currentConnection);
}
public List<DOCliente> loadCollectionByCriteria(Map<String, Object> criteria)
throws SQLException {
String selectSentence = "SELECT * FROM DBO.CLIENTES";
PreparedStatement statementSelect =
getCurrentConnection().prepareStatement(selectSentence);
//...
}
}
Tenho também minha camada de Serviços:
public abstract class DSOBase {
private Connection currentConnection;
public Connection getCurrentConnection() {
return currentConnection;
}
public void setCurrentConnection(Connection currentConnection) {
this.currentConnection = currentConnection;
}
public DSOBase(Connection currentConnection) {
setConnection(currentConnection);
}
public void commitOperations() throws SQLException {
getCurrentConnection().commit();
}
public void rollbackOperations() throws SQLException {
getCurrentConnection().rollback();
}
}
public class DSOCliente extends DSOBase {
public DSOCliente(Connection currentConnection) {
super(currentConnection);
}
public List<DOCliente> loadCollectionByCriteria(Map<String, Object> criteria)
throws SQLException {
DAOCliente daoCliente = new DAOCliente(getCurrentConnection());
return daoCliente.loadCollectionByCriteria(criteria);
}
}
E minha possível chamada em um método Main:
public class Main {
public static void main(String[] args) {
try {
Connection currentConnection = ConnectionFactory.getConnection();
DSOCliente dsoCliente = new DSOCliente(currentConnection);
List<DOCliente> collectionCliente = dsoCliente.loadCollectionByCriteria(null);
for (DOCliente doCliente : collectionCliente) {
System.out.println(doCliente);
}
}
catch (SQLException errSQL) {
errSQL.printStackTrace();
}
catch (Exception err) {
err.printStackTrace();
}
}
}
A injeção de dependências funciona desse jeito? Alguém tem uma luz sobre o assunto para me dar?
Grato pela atenção, galera, abraços e fiquem com Deus!