Duvida - Arquitetura do VRaptor 2

Ola pessoal,

Estou usando VRaptor2 e seguindo a apostila FJ-28 e de repente me surgiu uma duvida, por exemplo sei que eh possivel criar uma DAO generico para todos os meus Daos em vez de ficar criando um monte de DAO`s posso parametrizar assim :

[code]
public class Dao {

private Session session;
private final Class classe;

public Dao(Session session,Class classe) {
	this.session = session;
	this.classe = classe;
}

public void adiciona(T u) {
	this.session.save(u);
}

//mais codigo aqui …
[/code] Gostaria de saber se eh possivel fazer isso com a minha classe Logic, em vez de criar varios logics, UsuarioLogic, ProdutoLogic, AlgoLogic, poderia criar um logic generico que de alguma forma com parametrizacao pudesse ser usado por todos. (Assim como na classe acima).

Pelo que vejo na arquitetura do VRaptor , o VRaptor quando roda retira o Logic do nome e deixa o restante em minusculo certo? para poder executar e encontrar as coisas de forma correta. por isso a minha duvida eh em relacao a arquitetura em si. Isso eh possivel?

Obrigado,
Daniel.

Acho que se você fizer:

public class GenericLogic<T> { .... }

@Component public class UsuarioLogic extends GenericLogic<Usuario> { .... }

pode ser que funcione, testa aí e depois põe o feedback.

Mas acho que mesmo sendo o mesmo código, não faz sentido generalizar isso. Se você imaginar um cenário em que existe uma regra de negócio especifica de uma parte do modelo, vai acabar causando confusão essa generalização.

Se você realmente quer colocar toda a lógica em um lugar só, eu tentaria composição ao invés de herança.

Por exemplo:

public class MyGenericController<T> {
     public String metodo1(){..}
}
@Component
public class UsuarioLogic {
     private MyGenericController<Usuario> myGenericController = new MyGenericController<Usuario>();

     public String metodo1() {
         //coisas antes se necessárias
         myGenericController.metodo1();
         //coisa depois se necessárias
     }
}

Embora tenha achado as duas soluções péssimas, a escolha é sua. Lembrar só que cada objeto com sua responsabilidade seria o ideal, não existe problema em repetir código se estas classes representem partes distintas da aplicação.

[]´s

Ola,

Eh realmente sao duas possibilidades, mas nao mudaria em muita coisa pois de uma certa forma teria que continuar criando classes de cada tipo.

Mas vejo, e relamente nao faz sentido criar uma generica pois diferente do Dao, cada logica trata de um problema especifico e assim nao se deve
deixar algo generico como o Dao.

De qualquer forma, obrigado ai.

Flw.