Trabalhando com Design Patterns

7 respostas
rvaldomiro

Srs,

Estou implementando um sistema desktop que fará uso de alguns patterns então surgiram algumas dúvidas:

Utilizando DAO a função do VO (Value Object) é proporcionar a tranferência de valores entre as camadas correto? imaginemos uma situação onde tivessemos:

Cliente = Bean como atributos, gets e sets.
ClienteDAO = implementa a persistência.
ClienteVO = :?: O Próprio Cliente é o Value Object :?: pois nele estão as informações…

Onde ficam concentradas as regras de negócio neste modelo :?: tais como: verificarSaldo(), listarUltimasCompras() por exemplo.

Posso usar o padrão Observable para fazer a população dos meus objetos UI ou existe outra técnica :?:

Thank´s :wink:

7 Respostas

caiofilipini

Se vc implementar Cliente só com getters/setters, sim, seu VO pode ser um objeto da própria classe Cliente. Mas isso não é o ideal, porquê você acaba criando um Anemic Domain Model, como alertado pelo cv há alguns dias atrás:

http://www.guj.com.br/forum/viewtopic.php?t=11147

Poderiam ficar na própria classe Cliente, e aí vc usaria os VOs (ou TOs, Transfer Objects) para transportar os dados entre as camadas, como vc disse. :wink:

[]'s

rvaldomiro

Ok!

entendí o propósito dos VO´s então vamos prosseguir com o exemplo:

Eu teria então a classe Cliente com gets, sets, atributos e métodos de regra de negócio; a classe ClienteVO somente com gets, sets e atributos do domínio e a classe ClienteDAO para a persistência certo?? Isso quer dizer que minha classe Cliente deverá conhecer outros Beans para executar alguns métodos?? Por exemplo o método Cliente.varificarSaldo() deveria instanciar um objeto da classe Saldo e executar o método calcularSaldo(Cliente cliente) já que esta conhece e persiste as informações do Saldo, estou certo :!: :?:

caiofilipini
"rvaldomiro":
Por exemplo o método Cliente.varificarSaldo() deveria instanciar um objeto da classe Saldo e executar o método calcularSaldo(Cliente cliente) já que esta conhece e persiste as informações do Saldo, estou certo :!: :?:

Acho que o ideal aqui seria criar uma classe Conta, e não Saldo. E aí, seu Cliente teria uma Conta associada a ele. Exemplo:

public class Conta {
   private double saldo;

   public double getSaldo() {
      return this.saldo;
   }
   ...
}

public class Cliente {
   // atributos gerais
   private Conta conta;

   public double verificarSaldo() {
      return conta.getSaldo();
   }
}

Certo? :wink:

[]'s

rvaldomiro

Saquei :wink:

cv1

Só não use double pro saldo, ou algumas pessoas vão ficar bem irritadas… hehehe :smiley:

Use BigDecimal, assim voce nao cai em problemas pentelhos com arredondamento e estouro de valores. :wink:

pcalcado

Ouçam todos estas sabias palavras e nunca caiam na besteira de pergutnar ao seu cliente que algoritmo de arredondamento ele utiliza…

caiofilipini

“cv”:
Só não use double pro saldo, ou algumas pessoas vão ficar bem irritadas… hehehe :smiley:

Use BigDecimal, assim voce nao cai em problemas pentelhos com arredondamento e estouro de valores. ;)

Valeu pela correção! :lol:

[]'s

Criado 25 de abril de 2004
Ultima resposta 26 de abr. de 2004
Respostas 7
Participantes 4