Melhores práticas: verificar restrição de fontes de dados diversas

1 resposta
peron

Prezados Senhores,

Estou enfrentando uma dificuldade de melhor modelagem de um sistema. Analisei os diversos padrões de projeto e não visualizei saída para o problema.

Tenho um sistema que verifica na base de dados algumas restrições, mas também pode checar de outras fontes como, por exemplo, data do sistema. Pensando em ser customizável, fiz a seguinte estrutura:

public interface Limite {
    public boolean check();
}

Caso retorne falso, é porque não foi validada a expressao. Tenho implementada alguns limites, como:

public class LimiteData implements Limite {
    public Date dataLimite;

    public boolean check() {
        //aqui faz a rotina que checa a data e retorna true/false        
    }
}
public class LimiteQtdPessoas implements Limite {
    public int qtdMaxima;

    public boolean check() {
        //aqui esta o problema    
    }
}

Para criar uma lista de Limites carrego de um XML usando XStream e tenho um método checkAll que percorre tal lista.

Então, baseado nessa estrutura, como vou passar para a classe LimiteQtdPessoas a conexao, visto que ela faz consulta no BD e retorna. Qual a melhor arquitetura para isso? Dependency Injection fica complicado, pois quem instancia meu objeto é o XStream. A classe de negócio faz a consulta usando uma chamada ao DAO?

Qual o conselho de vocês?

Grato

Peron

1 Resposta

gomesrod

Creio que a solução mais coerente é o próprio objeto “Limite” chamar algum Dao (ou equivalente).

Se quem chama essas validações (algum código de negócio) tiver que passar a conexão, significa que ele tem que saber sobre essa conexão (e gerenciá-la!), o que não é bom.
Na verdade essa classe não deve nem saber que a LimiteQtdPessoas vai utilizar uma conexão com banco de dados! Para ela, tanto a LimiteData quanto a LimiteQtdPessoas são iguais.

A LimiteQtdPessoas é quem “sabe” que para fazer seu trabalho será necessário uma consulta à base de dados, e chama o Dao. O Dao, por sua vez, é quem deverá saber como obter a conexão.

EDIT:
Complementando: Se sua preocupação é a performance (evitar que cada validação chame sua própria conexão), essa é uma preocupação válida mas quem tem que cuidar disso é o mecanismo de gerenciamento de conexões, e não a classe de negócio.

Criado 21 de dezembro de 2009
Ultima resposta 21 de dez. de 2009
Respostas 1
Participantes 2