Java: Pattern Objects

De AleloWiki
Ir para: navegação, pesquisa

Breve conceito de orientação a objetos

Diariamente, inúmeros programadores em torno do mundo lidam com diversos problemas que “devem” ser resolvidos através de sua implementação em uma linguagem de programação. Na grande maioria das vezes essa mesma necessidade é exigida com demasiada rapidez e pouquíssimo prazo.

Para tanto, os profissionais desenvolvedores de linguagens que fazem uso do conceito de orientação a objetos criaram, a partir de tais necessidades, os padrões de projeto. Padrões de projeto são extremamente usados, questionados, reanalisados e exigidos por inúmeras empresas do ramo de Tecnologia da Informação (especialmente as que desenvolvem softwares - fábricas). O conceito é tão famoso que já foi usado para resolver problemas fora do ramo de TI, com estratégias de implementação atuante, uma vez que o modelo remete ao mundo real com exemplos de objetos agindo e sendo tais como no cotidiano do negócio envolvido.

Introdução aos padrões de objetos (Pattern Objects)

Dentre os vários padrões de objetos (Pattern Objects) existentes, alguns são consierados de grande utilidade e simplicidade de uso, enquanto outros deixam muitos usuários confusos quanto ao contexto, onde e como usar, bem como as diferenças em relação a outros padrões semelhantes. O pattern DAO, por exemplo, é muito conhecido e usado no mundo de desenvolvimento de software em Orientação a Objetos, entretanto, muitos confundem a real diferença entre este padrão e o padrão Repository.

[ Figura 1: Livro Design Patterns - Head First ]

A seguir, as diferenças básicas entre os padrões PO (Persistent Object), POJO (Plain Old Java Object), BO (Business Object), DTO (Data Transfer Object) e finalmente o VO (Value Object)[1]. Estes padrões geram muita confusão entre os desenvolvedores e por muitas vezes são tidos como repetidos ou iguais, tornando assim seu uso devido indiferente.

Persistent Object (PO)

Padrão de objeto comum ao framework de persistência ORM Hibernate. Representa um objeto de persistência simples com atributos, métodos de recuperação e setagem (definição de atributos); muito semelhante ao VO (Value Object) ou TO (Transfer Object), porém sem referência a códigos de transação com o banco de dados.

Data Transfer Object – DTO

Objeto simples usado para transferir dados de um local a outro na aplicação, sem lógica de negócios em seus objetos e comumente associado à transferência de dados entre uma camada de visão (view layer) e outra camada de persistência dos dados (model layer). Frequentemente, o padrão de objeto DTO é usado em conjunto com um objeto DAO. A figura 2 ilustra a representação entre os dois padrões.

[ Figura 2: Exemplo de união entre os padrões DTO e DAO ]

Esse padrão também é recomendado quando não se deseja expor a camada de persistência, porém é preciso que sejam exibidos os mesmos dados na camada de apresentação. Por exemplo, considere uma tela de uma aplicação que necessite listar os dados de 10 pessoas cadastradas em uma tabela. Para acessar estes dados, a camada de persistência assim o faz com a listagem configurada em um ArrayList de 10 PO’s (vide padrão acima). Para passar esses valores à tela, a mesma lista antes tem de ser convertida para uma lista de DTO’s com mesmos atributos e métodos get’s/set’s. Tudo isso porque a mesma aplicação faz uso do JPA, por exemplo, ou Hibernate e os mesmos frameworks não permitem que os dados tidos como “lazy (preguiçosos)” perdurem até depois de a conexão ter sido fechada. Por tal razão a conversão se faz necessária e assim os dados poderão fazer o trajeto sem serem perdidos ou sem que nenhum erro de conexão venha a acontecer.

Observação: os padrões de projeto também não devem ser usados em detrimento do ambiente onde se está executando o mesmo projeto, a ideia é que eles sejam abstratos o suficiente para se adaptar. É muito importante considerar o conjunto de possibilidades e os cenários possíveis quanto à melhor forma de realizar um projeto.

Plain Old Java Object (POJO)

Designa um objeto sem grande valor dentro do modelo de classes de um projeto, an ordinary Java Object.

O termo é usado para denotar um objeto Java que não segue nenhum dos conceitos principais dos modelos de objetos Java, convenções e frameworks.

Os POJO’s conseguem, inclusive, ser convertidos em outros padrões já citados, como:

  • POJO Persistence -> PO
  • POJO Transmission Process -> DTO
  • POJO como presentation layer -> VO

Por mais simples que seja, são considerados objetos centrais e importantes em um projeto OO.

[ Figura 3: Por mais simples que seja, são considerados objetos centrais e importantes em um projeto OO ]

Business Object (BO)

Um objeto de negócios é um tipo de uma entidade inteligível que atua como um ator dentro da camada de negócio orientada a objeto, em uma arquitetura de 'n' camadas.

Basicamente sua função é encapsular a lógica de negócios para um objeto (que pode incluir vários POs e geralmente precisam de um BO em um PO). Um PO pode atuar como um BO, mas antes precisa ser convertido para tal.

Há três conceitos principais sobre BO:

  • Contém apenas as propriedades do objeto de negócio;
  • Contém apenas os métodos de negócio;
  • Ambos.

Durante o uso efetivo, o conceito do que é correto não é importante, a chave é apropriada para a aplicação prática em suas próprias necessidades de projeto.

Value Object – VO

Esse padrão é um pouco confuso. Segundo a Wikipédia, um Objeto de valor “é um pequeno objeto que representa uma entidade simples, cuja igualdade não é baseada em identidade: ou seja, dois objetos de valor são iguais quando têm o mesmo valor, não necessariamente sendo o mesmo objeto”.

Isso parece confuso quando pensamos em objetos Java atuando como POJOs simples. Definições a parte, esse padrão até hoje sofre alterações em suas explicações. Alguns o definem de uma forma outros a sua maneira, etc. É um objeto usado basicamente para exibir dados na camada de apresentação. Uma noção formal do que é de fato um “value object” pode ser encontrada na JEP 169 (Vide links).

Referências

  1. Diferença entre os patterns PO, POJO, BO, DTO e VO: DevMidia: Acessado em 6/4/2022.