Solucao para evitar o uso de VOs

Bom dia,

Tenho andado pesquisado sobre o uso ou nao de VOs e percebi que nao eh muito legal usa-los, devido a varios motivos. Por exemplo, se eu atualizar minhas entitys com novos atributos, vou ter que sair alterando todos os meus VOs.

Uma solucao seria criar a minha entity e uma outra classe que extenderia essa entity (que ai sim teria os metodos de negocio). Algo assim:

public class Usuario implements Serializable {

      private String nome;
      private Endereco endereco;
      private List livros;
      // etc...
       
     // get / set
}

A classe acima seria a classe q eu enviaria pro cliente.

e a classe que de fato possui os metodos de negocio seria algo como a classe abaixo:

public class UsuarioBO extends Usuario {

     /* 
     * Implementacao dos metodos de negocio
     */
}

Resumindo,

  • Meus controladores iriam usar a classe UsuarioBO.
  • Seria enviado para o cliente apenas a classe Usuario

Dessa forma, caso houver alteracoes ou inclusoes de atributos ou qqer coisa do genero, eu so iria modificar em um lugar so, alem eh claro de diminuir o numero de classes do meu sistema.

O que vcs acham?

Valeu,
Marcos

C nao me engano, embora vc tenha a interface Usuario, para trafegar, vc necessitara da Instancia de um objeto q implemente a mesma tipo:

Neste caso, vc estaria passando o UsuarioBO da mesma maneira…

Isto eh soh um palpite, me corrijam c eu estiver errado :wink:

Usuario eh uma CLASSE CONCRETA com gets / sets. Nao eh uma interface

Ops! Nao prestei atencao :oops: :oops: :oops:

E pra que vc precisa de uma classe concreta, nesse caso? Uma interface tambem resolve. Voce pode ter duas ou mais interfaces implementadas pelo mesmo objeto de negocios, so tomando o cuidado de nao colocar comportamento demais numa classe so.

De resto, concordo com voce, quanto menos DTOs e VOs e objetos burros, melhor.

CV,

nao entendi seu post. Mas a minha intencao em “quebrar” a classe Usuario em 2 (Usuario e UsuarioBO) é de poder enviar pro cliente uma classe (Usuario) que funcionaria exatamente como um VO.

A vantagem eh q eu nao iria ficar criando um VO pra cada entidade minha q eu precisar enviar seus respectivos dados pro cliente.

Nao sei se consegui me explicar,

Valeu
Marcos

Nao existe necessidade em criar uma classe Usuario, nesse caso. Voce pode fazer:

public interface User implements Serializable { // getters, setters, enums, e o que mais }

E depois:

public interface UserBusiness extends User { // metodos de negocio }

E depois…

public class UserImpl implements UserBusiness { // implementacao de tudo

Pra parte “burra” do sistema, voce passa uma referencia a um User (que nao ve os metodos de negocio), e pras partes onde mexer com o negocio eh necessario, passe um UserBusiness. Desse jeito voce NUNCA, JAMAIS precisa passar um UserImpl pra ninguem :wink:

Isso não passa na compilação... 
Cv, uma interface não pode implementar outra interface!Ela pode dar um extends em outra interface!:wink:

Isso não passa na compilação…
Cv, uma interface não pode implementar outra interface!Ela pode dar um extends em outra interface!:wink:

Ah, Ironlynx, da um desconto… eh natal :mrgreen: