Isso me lembra a discussão sobre modelo de domínio anêmico.
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…
[]s!