Pergunta

As noções mencionadas no título da pergunta são sinônimos até certo ponto?Onde estão as principais diferenças (contexto, estrutura, ...) e uma pode ser considerada um subconjunto de outra?Aqui estão algumas breves definições retiradas da Wikipedia.

POJO (objeto Java simples e antigo) Wikipédia

No software de computação, Pojo é um acrônimo para o objeto Java antigo.O nome é usado para enfatizar que um determinado objeto é um objeto Java comum, não um objeto especial e, em particular, não é um javabean empresarial.O termo foi cunhado por Martin Fowler, Rebecca Parsons e Josh Mackenzie em setembro de 2000:

"We wondered why people were so against using regular objects in their
 systems and concluded that it was
 because simple objects lacked a fancy
 name. So we gave them one, and it's
 caught on very nicely."

Feijão Java Wikipédia

Os Javabeans são componentes de software reutilizáveis ​​para Java que podem ser manipulados visualmente em uma ferramenta do construtor.Praticamente, são aulas escritas na linguagem de programação Java em conformidade com uma convenção específica.Eles são usados ​​para encapsular muitos objetos em um único objeto (o feijão), para que possam ser transmitidos como um único objeto de feijão em vez de vários objetos individuais.Um Javabean é um objeto Java que é serializável, possui um construtor nulo e permite acesso a propriedades usando métodos Getter e Setter.

Objeto de valor Wikipédia

O objeto de transferência de dados (DTO), anteriormente conhecido como Value Objects ou VO, é um padrão de design usado para transferir dados entre os subsistemas de aplicativos de software.Os DTOs são frequentemente usados ​​em conjunto com os objetos de acesso a dados para recuperar dados de um banco de dados.

Objeto de negócios Wikipédia

Um objeto de negócios é um tipo de entidade inteligível, sendo um ator dentro da camada de negócios em um programa de computador orientado a objetos de camada N.

Relacionado:

Diferença entre DTO, VO, POJO, JavaBeans? Qual é a diferença entre um JavaBean e um POJO? DDD:qual a utilidade da diferença entre entidades e objetos de valor?

Foi útil?

Solução

Nem todas essas classificações estão relacionadas.Aqui está o meu entendimento:

  • POJO é o que o nome sugere - um objeto Java simples e antigo.Não há nada de especial nisso.E é exatamente isso que queremos transmitir quando dizemos que um objeto é um POJO.Hoje, a maioria dos aplicativos usa alguns tipos de estruturas subjacentes, e com as estruturas vêm requisitos sobre os objetos que serão integrados à estrutura - o objeto deve implementar uma interface ou estender uma classe.Quando dizemos que um objeto é um POJO, queremos dizer que é apenas um objeto comum e não depende de nenhum framework.

  • Um JavaBean é uma classe Java que segue certas convenções conforme descrito na sua pergunta.Esses objetos são frequentemente exigidos por certas estruturas que usam reflexão para descobrir as propriedades (acessíveis através de getters/setters) do objeto e manipulá-las, por exemplo.beans expostos a JSPs, Spring beans etc.O bom dos JavaBeans é que eles ainda são POJOs.Embora sigam certas convenções, as convenções não são definidas por nenhuma estrutura específica, mas sim pelo padrão Sun Javabean e as classes ainda são classes Java simples, sem vínculos com classes ou interfaces de qualquer estrutura de terceiros.

  • Objetos de negócios referem-se a objetos que representam entidades do domínio de negócios.Eles geralmente residem na sua camada de negócios – a camada onde está toda a lógica de negócios.Esses objetos geralmente são mapeados para entidades de armazenamento de persistência, por exemplo.tabelas.Esses objetos podem ser POJOs, JavaBeans, EJBs etc.

  • Objetos de valor são um tipo de padrão de design.Em algumas aplicações web pequenas, você também tem a opção de usar seus objetos de negócios na camada web.Entretanto, em aplicativos maiores ou aplicativos J2EE, você define objetos de valor para mover informações da camada de negócios para a camada da web.É por isso que eles também são chamados de Objetos de Transferência de Dados (DTOs).Esses objetos geralmente possuem apenas os atributos necessários na camada da web e deixam para trás os atributos dos objetos de negócios que foram destinados ao consumo da camada de negócios.Eles também podem ter atributos “computados” que são gerados na camada de negócios.O uso desses padrões ajuda a dissociar as camadas de negócios e da web.

Outras dicas

Aqui está minha opinião:

  1. Objetos de negócios é um termo genérico para a idéia abstrata que representa seu problema.Você pode implementá -los em qualquer idioma.Em Java, você tem opções adicionais a fazer, porque elas podem ser poços ou ejbs, mutáveis ​​ou imutáveis.
  2. Objetos de valor ou DTOs são usados ​​para transportar dados entre camadas.Eles geralmente são imutáveis.Eles podem ser implementados como POJOs ou Java Beans.Pense neles como outro subconjunto de POJOs.
  3. Um Java Bean está em conformidade com a especificação original da Sun.O objetivo deles era fornecer uma interface que permitisse que eles fossem conectados a um IDE estilo VB com facilidade.Pense neles como um subconjunto do POJO.
  4. Às vezes, as pessoas ficam confusas sobre a diferença entre Java Beans e Enterprise Java Beans.Java Beans fazem parte da especificação original do Java 1.0, destinada a ser como componentes VB (lembra do "Bean Box"?).Enterprise Java Beans foi uma especificação que descrevia como objetos Java especiais implementariam interfaces específicas para interoperar com um servidor de aplicativos Java EE.O servidor de aplicativos era um monitor de transações para uma arquitetura de componentes distribuídos que lidaria com threading, persistência, pooling, ciclo de vida de objetos, mensagens, nomenclatura, etc.EJBs são um subconjunto muito especial de objetos Java que funcionam apenas no contexto de um servidor de aplicativos Java EE.
  5. Um POJO pode ser implementado para estar em conformidade com o padrão Java Bean, mas não é um requisito.Qualquer objeto Java se qualifica como POJO.O objetivo original era distingui-los do EJB versão 2.0, que exigia várias interfaces para interoperar adequadamente com o servidor de aplicativos Java EE.

A questão é se é um erro usar alguns deles como sinônimos (como ouvi algumas pessoas fazerem) e se uma determinada classificação pode ser considerada um subconjunto ou outro.

É um erro usar esses termos como sinônimos.Eles claramente têm significados distintos.As definições citadas (e as fornecidas em outras respostas) deixam isso claro.

No entanto, muitas vezes é válido usar muitos (ou mesmo todos) desses termos para descrever o mesmo objeto ou objetos.É tudo uma questão de perspectiva;ou sejaqual aspecto do(s) objeto(s) você está tentando enfatizar.

Síntese (a partir das respostas dadas):

  • POJO:Um objeto comum sem dependências de qualquer estrutura.Ele pode ser adaptado para estar em conformidade com o padrão Java Bean sem ser um requisito como tal.
  • JavaBean:Objeto em conformidade com a especificação Sun JavaBean ou Java 1.0 (consulte "Bean box").Eles foram originalmente planejados para fornecer uma interface para que pudessem ser conectados a um IDE estilo VB com pouca dificuldade.Pode ser considerado um subconjunto de POJOs e permanecer independente de frameworks.Pode empregar certos mecanismos, como reflexão, para acessar propriedades.
  • Java Bean Corporativo:Eles não devem ser confundidos com Java Beans.Com as simplificações trazidas com a versão 3.0, os EJBs podem ser considerados equivalentes a um POJO.O EJB em si é uma especificação que descreve objetos Java especiais que podem interoperar com um servidor Java EE.O servidor como tal agia como um monitor de transações no contexto de uma arquitetura de componentes distribuídos, lidando com coisas como threading, persistência, pooling, ciclo de vida de objetos, mensagens e nomenclatura.Como tal, um EJB pode ser visto como um subconjunto muito especial usado no conteúdo de um servidor de aplicativos Java EE.
  • Objeto de negócios:Conceito teórico ou ideia abstrata que ajuda a representar um determinado problema.Representa entidades de domínio comercial e reside na camada comercial de um aplicativo.Eles podem ser mapeados para entidades no contexto de persistência.O objeto pode ser um POJO/JavaBean/EJB e ser mutável ou imutável.
  • Objeto de valor/objeto de transferência de dados:Emprega um padrão de design que ajuda a dissociar as camadas de negócios e da web.Isso é adequado ao contexto de grandes aplicações onde os objetos podem transitar entre camadas (a camada comercial e a camada web, por exemplo).Eles geralmente são de natureza imutável e podem ser formatados como POJOs ou Java Beans.Uma especificidade é que eles podem conter atributos computados que são gerados na camada de negócios.

P.S:Marcado como wiki da comunidade, sinta-se à vontade para editar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top