Eu fiz um método no meu business delegate genérico do tipo ‘save’ passando tb um objeto DTO. Agora queria a partir desse DTO (que pode ser um ClienteDTO, FornecedroDTO, etc etc etc), achar a classe de negocio correspondente aquele DTO. Tipo se passo ClienteDTO, atraves de um metodo por exemplo createBusinessObject(dto) eu obtenho uma instancia para a classe de negocio do cliente. Porém, não queria usar um factory que ficasse naquela:
if(param instanceOf ClienteDTO) return new ClienteBusiness();
if(param instanceOf FornecedorDTO) return new FornecedorBusiness();
etc
porque no futuro quando adicionar novos DTO’s, não queria ter que mexer nesses factory’s etc. Alguem sabe se tem um design pattern para isso? eu acho que fazer isso é querer milagre (a partir de uma classe, instanciar outro, sem que elas tenham uma relacao direta, nem ficar no if isso faz isso), mas não custa procurar heheh
Já que a única relação é que o nome do DTO tem um prefixo igual ao do Bussiness utilize esse prefixo para criação dos objetos… Por exemplo:
String pacoteBussines = "org.xyz.meupacote.";
public Bussiness createBussinesObject(Dto dto) throws Exception{
String dtoClassName = dto.getClass().getSimpleName(); //pega o nome da classe
String prefixo = dtoClassName.substring(0, dtoClassName.length() - "DTO".length()); //pega o prefixo
String classeBussiness = pacoteBussiness+prefixo +"Bussines";
Class clazzBussiness = Class.forName(classeBussiness);
return (Bussiness) clazzBussiness.newInstance();
}
Seria mais ou menos isso… [Nao sei nem se isso vai compilar]
Teria como também criar um registro com todos os seus Bussines… e cada bussines fala de alguma forma por qual DTO ele é responsável (através de Generics ou Annotations… ou algum método que vc coloque na interface Bussiness)
Se ficou complicado de entender … pergunta o que nao entendeu que eu explico denovo