Persistindo Modelo de Domínio Rico
Pessoa, atualmente venho me dedicando ao Pattern Domain Model e após ler o livro [Patterns of Enterprise Application Architecture] de Fowler e um artigo da revista Mundo Java N. 22 [Design Pattern para o Mundo Real - parte 2] de Rodrigo Yoshima, bateu uma grande duvida:
Como persistir um modelo de domínio que utiliza diversos Patters como State citado pelo Rodrigo ou Strategy utilizado por Fowler em seus exemplos no Domain Model.
Vamos utilizar o exemplo de Fowler:
http://martinfowler.com/eaaCatalog/domainModel.html
class Contrato{
....
public void calcularLancamento(){
produto.calcularLancamentoDeReceitas(this);
}
}
[code]class Produto{
private String nome;
private EstrategiaLancamento estrategiaLancamento;
public Produto(String nome, EstrategiaLancamento estrategia){
this.nome = nome;
this.estrategiaLancamento = estratégia;
}
public static Produto novoProduto1(String nome){
return new Produto(nome,new EstrategiaLancamentoTotal());
}
Public static Produto novoProduto2(String nome){
return new Produto(nome, new EstrategiaLancamentoEmTresEtapas(int etapa1, int etapa2));
}
void calculaLancamentoDeReceita(Contrato contrato){
return estrategiaLancamento.calcularLancamentoDeReceita(contrato);
}
}[/code]
abstract class EstrategiaLancamento{
abstract void calcular calcularLancamentoDeReceita(Contrato contrato);
}
class EstrategiaLancamentoTotal extends EstrategiaLancamento{
void calcularLancamentoDeReceitas(Contrato contrato){
contrato.adicionarLancamentoDeReceitas(new LancamentoDeReceitas(contrato.lerReceita()), contrato.lerDataAssinatura());
}
}
[code]class EstrategiaLancamentoEmTresEtapas extends EstrategiaLancamento{
private int primeiraEtapaDeLancamento;
private int segundaEtapaDeLancamento;
public EstrategiaLancamentoEmTresEtapas(int primeira, int segunda){
this.primeiraEtapaDeLancamento = primeira;
this.segundaEtapaDeLancamento = segunda;
}
void calcularLancamentoDeReceitas(Contrato contrato){
Dinheiro[] alocao = contrato.lerReceita().alocar(3);
contrato.adicionarLancamentoDeReceitas(new LancamentoDeReceitas(alocacao[0],contrato.lerDataAssinatura()));
contrato.adicionarLancamentoDeReceitas(new LancamentoDeReceitas(alocacao[1],contrato.adicionarDias(primeira)));
contrato.adicionarLancamentoDeReceitas(new LancamentoDeReceitas(alocacao[2],contrato.adicionarDias(segunda)));
}
}[/code]
quando for persistir a entidade Produto na camada de persistencia “JPA” eu devo persistir em banco de dados a classe Strategy tambem???
é ai que esta minha grande dúvida!!!