Issue #66: Refactor engine and adapter relationship

Lucas Fernandes de Oliveira
2018-05-16T13:24:57Z

Após um problema encontrado com a geração de consulta os dois principais componentes envolvidos no processo, (**Engine** e **Adapter**) foram refatorados.

A *Engine* ganhou mais importância. Além de encontrar as agregações necessárias para realizar a consulta ela já entrega para o *adapter* a estrutura que a consulta deve ser montada.

Foi definida uma estrura baseada em 3 operações que permite contruir uma agregação a partir de um conjunto de outras agregações.

O *Adapter* teve a função reduzida e apenas deve traduzir as 3 operações para o formato aceito em seu próprio banco de dados.

Além da reestruturação desses componentes o próprio algoritmo de construção da consulta foi redefido, baseado nessas 3 operações. Com esse novo algoritmo o problema de geração de consulta foi resolvido, além de simplicar o código em si.

Além das mudanças nesses compoenentes essenciais foi adicionada uma nova classe **ViewHandler** que foi utilizada como abstração pelo componente *engine* para manipulação das agregações. Essa classe assumiu as responsabilidades da construção da estrutura da consulta em 3 operações.

As principais consequencias dessa modificação são:
* A contrução da consulta é independe do banco de dados. Agora realizada pela *engine*.
* A criação de novos adaptadores foi simplificada.
* O algoritmo de contrução de consulta doi corrigido

Signed-off-by: Lucas Fernandes de Oliveira <lfoliveira@inf.ufpr.br>