Tenho um Value Object e um Business Object de cidade.
Toda validação deveria ser feita no BO?
Estava pensando em fazer o seguinte:
Criar um metodo tipo createCidade(parâmetros) que recebe os parâmetros necessários para criação de uma cidade encapsulando a instânciação.
É mesmo necessario criar factories para VO’s?! Não vejo nenhuma vantagem em criar uma factory que recebe os mesmos parametros que um construtor receberia e como os VO’s não são, geralmente, suscetiveis a varias implementações as factories ficam meio sem sentido, ou não?!
[quote=“fabriciogiordani”]
Estava pensando em fazer o seguinte:
Criar um metodo tipo createCidade(parâmetros) que recebe os parâmetros necessários para criação de uma cidade encapsulando a instânciação.
O que vcs acham?[/quote]
Depende… Fazer
public Cidade createCidade(String nome, String uf) {
retur new Cidade(nome, uf);
}
nao tem mta utilidade. Um factory seria util se vc fosse puxar a instancia de um proxy, por exemplo… algo como
public Cidade createCidade(String nome, String uf) {
Cidade cidade = (Cidade)ProxyFactory.wrap(Cidade.class);
cidade.setNome(nome);
cidade.setUf(if);
return cidade;
}
Acho que se vc tem BOs ricos, que usam serviços de outros BOs e objetos num container IoC, vale usar uma Factory.
Ou melhor dizendo, vale usar o padrão ‘‘Factory’’, que pode ser um método de um objeto que também está no container!! : )
Ou seja, sua factory pode passar para o BO, além dos valores que vêm do VO, wrappers e objetos do container.
Por exemplo, se seu BO faz prevalência, ele pode ter um construtor que recebe um Prevayler, e a Factory fica meio assim:
public class ClientFactoryImpl implements ClientFactory {
public ClientFactoryImpl(Prevayler prevayler, ProxyFactory proxyFactory) {...}
public Client getInstance(ClientValue value) {
Client result = new Client(prevayler);
result = (Client) proxyFactory.wrap(result);
result.readFromValue(value);
return result;
}
}
Hmmm, não gostei. Melhor seria:
public Client getInstance() {//igual, mas sem argumentos}
// em outro lugar:
ClientFactory fac = (ClientFactory) pico.getComponentInstance(ClientFactory.class);
Client client = fac.getInstance();
try {
client.readFromValue(value);
return SUCCESS;
}
catch (SomeLogicFailedException e) {
showError(e);
return ERROR;
}
E aih, q vcs me dizem?? Já sei que tem um antipattern aí no meio, a Factory não faz nada com o objeto Prevayler, ela só passa pros filhos. Mas não parei pra pensar se dá pra fazer diferente…