• Method: Esta classe representa um método de classe a ser gerado pelo sistema, sendo atribuição da mesma gerenciar as propriedades do método a ser gerado como seu nome, escopo, tipo de retorno, entre outros;
• ITemplateOwner: Interface que representa a estrutura básica de uma classe que utiliza arquivos templates para determinar como será o formato do código-fonte gerado;
• TemplateScope: Define o escopo de um template. Através desta classe é possível definir que um arquivo template será utilizado para gerar todas as classes do sistema, ou apenas uma única classe;
• Template: Classe que representa um arquivo template a ser utilizado durante o processo de geração de código, sendo sua responsabilidade gerenciar o arquivo template representado;
• Generator: Esta classe é responsável pelo processo de geração de código-fonte, onde todas as configurações realizadas pelo usuário são cruzadas com os arquivos templates selecionados, gerando os arquivos que contém o código-fonte das classes configuradas;
• DataTypeMapping: Classe responsável pelos mapeamentos entre tipos de um banco de dados e tipos de uma linguagem de programação, em específico; e
• DataTypeMappingElement: Classe que representa um mapeamento entre um tipo de banco de dados e um tipo da linguagem de programação.
Ressalta-se que no diagrama de classes da ferramenta proposta (Figura 42), não são apresentados os getters e setters utilizados para encapsular os atributos das classes, por motivos de simplicidade na visualização do diagrama. No entanto, todos os atributos das classes apresentadas possuem getters e setters para encapsulá-los.
ajudando o XML a se tornar o formato padrão para transmissão de dados entre diferentes aplicativos e computadores (BINSTOCK et al, 2002, tradução nossa).
Para que a transmissão de dados em formato XML entre diferentes aplicativos e computadores seja realizada, é necessário conhecer a estrutura do documento. Isto é possível através da utilização de um XML Schema, que permite descrever a estrutura de documentos XML.
Esta descrição possibilita definir quais os elementos e atributos que podem ou devem estar presentes em um documento, especificar o número mínimo e máximo de ocorrências de um determinado tipo de elemento, descrever um conjunto de valores permitidos para um atributo ou elemento, definir a ordem de disposição dos elementos, entre outras características de um documento XML (BINSTOCK et al, 2002, tradução nossa; VLIST, 2002, tradução nossa).
Com base em tais informações, e sabendo que todas as configurações realizadas pelo usuário na ferramenta como, por exemplo, classes, métodos, atributos, bem como a estrutura das tabelas de banco de dados relacionado às classes configuradas pelo usuário, serão salvos em formato XML, torna-se relevante elaborar o XML Schema que documente e valide a estrutura e o conteúdo do documento XML utilizado pela ferramenta para persistir informações.
Com o intuito de permitir um fácil entendimento, o XML Schema elaborado é apresentado de maneira gráfica, utilizando a notação da ferramenta Liquid XML Studio. Detalhes sobre cada estereótipo que compõem a notação utilizada pela ferramenta podem ser obtidos em Liquid (2007).
Além da representação gráfica do XML Schema, o Apêndice B apresenta o código-fonte do XML Schema mencionado.
A Figura 43 apresenta a visão geral do XML Schema utilizado pela ferramenta proposta para persistir informações sobre as configurações realizadas.
Figura 43. Visão geral do XML Schema da ferramenta proposta
Na Figura 43, onde é apresentada a visão geral do XML Schema proposto, é possível verificar, de maneira geral, quais os dados que serão salvos no documento XML. O elemento Project é o nodo raiz do documento XML, contendo informações como o nome do projeto, mapeamentos entre tipos de bancos de dados e tipos da linguagem de programação e a linguagem de programação definida pelo usuário para a geração do código-fonte. O elemento Database armazena as informações básicas do banco de dados, como nome e owner, dados relacionados às configurações de acesso ao banco de dados e a estrutura das tabelas do banco de dados selecionado.
O elemento Classes possui informações sobre as classes configuradas pelo usuário, como por exemplo, seus atributos e métodos. Já o elemento Templates possui informações sobre os arquivos templates definidos para serem utilizados durante o processo de geração de código-fonte. O elemento Generator possui informações relacionadas às configurações do gerador de código-fonte, como o diretório onde os arquivos serão gerados e a extensão padrão para tais arquivos.
Além da visão geral do XML Schema, é conveniente mostrar os detalhes internos dos elementos que são constituídos a partir de tipos complexos (complex types). Portanto, a Figura 44, Figura 45 e Figura 46 apresentam, respectivamente, os detalhes dos elementos ConfigurationSettings, Table e Field, elemento que pertence a estrutura do elemento Table.
Figura 44. Estrutura do elemento ConfigurationSettings
Figura 45. Estrutura do elemento Table
Figura 46. Estrutura do elemento Field
O elemento ConfigurationSettings (Figura 44) descreve as configurações utilizadas para acesso a um dos bancos de dados suportados pela aplicação. O elemento Table (Figura 45) define as informações referentes às tabelas do banco de dados como, por exemplo, o nome da tabela, bem como informações sobre a estrutura dos campos que compõe tal tabela, descritas no elemento Field (Figura 46).
Além do detalhamento dos elementos ConfigurationSettings e Table, faz-se necessário descrever a estrutura interna do elemento Class, bem como a estrutura dos demais elementos que constituem o mesmo. A estrutura de tais elementos pode ser observada na Figura 47, Figura 48, Figura 49 e Figura 50.
Figura 47. Estrutura do elemento Class
Figura 48. Estrutura do elemento Attribute
Figura 49. Estrutura do elemento UnderlyingDBObjects
Figura 50. Estrutura do elemento Method
A Figura 47 apresenta os detalhes do elemento Class, que define informações sobre uma classe configurada pelo usuário, como o seu nome, sua classe base, entre outros. O nome das tabelas do banco de dados que originaram a classe em questão é definido no elemento Table. Informações sobre os atributos de classe são definidos no elemento Attribute (Figura 48), e os nomes dos campos e respectivas tabelas, mapeados pelo atributo de classe, são descritos no elemento UnderlyingDBObjetcs (Figura 49). A estrutura do elemento Method (Figura 50) descreve as informações sobre um método de classe. O atributo Type deste elemento define se o método refere- se a um comando de atualização, exclusão, inserção ou seleção de dados, enquanto que o atributo Scope determina a visibilidade do método. Já o elemento Parameter descreve um parâmetro passado para o método.
Por fim, o detalhamento da estrutura interna do elemento Template pode ser observado na Figura 51.
Figura 51. Estrutura do elemento Template
A Figura 51 apresenta os detalhes do elemeto Template, que define informações sobre os arquivos templates a serem utilizados durante a geração de código-fonte. O atributo Scope determina se o arquivo template será utilizado a nível de projeto ou a nível de classe. O elemento Owner é responsável por definir o nome da classe ou do projeto associado ao arquivo template. O elemento FileName define onde o arquivo template está fisicamente armazenado. Já os elementos Suffix e FileExtension são utilizados para armazenar características específicas do arquivo de código-fonte gerado a partir do template, como a extensão do arquivo e um sufixo de identificação.