Data Type Framework

(english)

O que Object Persistence Framework (OPF) e o padrão de projeto MVP (Model-View-Presenter) possuem em comum, além de código orientado a objetos? Os dois utilizam a mesma fonte de dados. Em uma ponta o OPF lê informação de um mecanismo de persistência (que pode ser um SGBDR) ou envia informações para ele, em outra ponta o MVP apresenta informações ao usuário ou recebe informações dele. Quem faz a ligação entre os dois é o que alguns autores chamam de Value Type Framework (VTF), e que eu chamo de Data Type ou simplesmente de Subject framework.

Data Type é um conjunto de classes utilizadas para guardar informações de forma orientada a objetos. É um mecanismo que permite objetos estarem em memória, no meio tempo em que foram lidos de um banco de dados e ainda não foram atualizados e/ou dispensados pelo usuário. A implementação de um Data Type framework produtivo e flexível é uma das tarefas mais complexas na construção de um SDK orientado a objetos.

É de responsabilidade do Data Type prover mecanismos para a construção de classes de negócio, tal como TPedido e TCliente, classes estas usadas para criar a instância de um pedido ou de um cliente em memória. É ao redor do Data Type que ocorre a definição do modelo de negócio e o relacionamento entre as classes, e que ocorre a aplicação de regras de negócio e validação das entradas do usuário.

Um Data Type, por ser orientado a objetos, permite que sejam criados modelos com hierarquias de classes de forma simples, um trabalho de outro mundo quando o modelo relacional é utilizado.

Exemplos de como esta abordagem ajuda na construção de regras de negócio:

Um dos sistemas da Laserpress, gerador de orçamento para a indústria gráfica, possui um objeto de negócio TDespesa que possui quatro subclasses: TDespesaDireta, TDespesaIndireta, TDespesaMensal e TDespesaPercentual. Um item de despesa deve ser de uma destas quatro classes, enquanto o próprio cálculo do orçamento refere-se a despesa de forma abstrata, sem saber com qual delas ele está lidando. Cada classe de despesa calcula seu próprio valor de forma diferente das demais.

Este mesmo sistema permite gerar um orçamento com quatro tipos diferentes de itens: simples, impresso, blocagem e livro. Cada orçamento pode ter itens de tipos diferentes, cada um dos quatro itens possui atributos diferentes, são tratados com formulários diferentes e são, também, calculados de forma diferente. O usuário não precisa preencher um cadastro para orçar um livro enquanto o trabalho é apenas a confecção de um carimbo.

A construção de um modelo utilizando um Data Type framework é mais trabalhosa de início. O programador precisa ter familiaridade com programação orientada a objetos para construir seus modelos, precisa ter familiaridade com o SDK utilizado, e precisa passar mais informações ao modelo do que quando utiliza o método relacional. Por outro lado, toda informação passada ao framework é revertida em reaproveitamento. Exemplos: o OPF utiliza o modelo de classes para construir o script que criará as tabelas, chaves de índice e constraints de chave estrangeira do banco de dados. O MVP utiliza o modelo de classes para conhecer detalhes das classes de negócio, e com isto criar funcionalidades para controles visuais, tal como incluir ou alterar item em um grid.

Diversos sistemas orientados a objetos utilizam bancos de dados relacionais, ao invés de banco orientado a objetos, para gravar seus objetos de negócio. Para tornar esta tarefa possível, é necessário outro framework que faça mapeamento objeto-relacional, ou seja, transformar dados na forma de objetos para a forma relacional e vice-versa. Mas isto é assunto para outro post.