Componentes burros

A idéia

Título estranho para um texto que tende a ser pior ainda..  Este post é na verdade parte da compilação de uma de minhas pesquisas mais recentes para realização de um projeto arquitetural. Não almejo que em um post eu consiga explicar corretamente o que vem a ser esta idéia do então chamado Frankie (de Frankenstein, claro) como um todo mas como tudo tem que começar de alguma forma, vamos lá…

Burro, mas bem burro mesmo…

Fazem algumas semanas eu e um outro colega recebemos a atribuição de desenvolver um framework que inicialmente trataria apenas de mais um ORM com algumas diferenças básicas; Nesta primeira idéia, teriamos que criar além do ORM propriamente dito que seria responsável por gerar, e manter, o repositório de entidades mapeadas do banco de dados sempre atualizado.

Foi então que definimos uma atribuição extra interessante para este robô, que seria a de manter também atualizado um arquivo DTD baseado nas definições strict da W3C; Este passo do processo é muito interessante do ponto de vista da separação das camadas possibilitando ao designer ou seja lá quem for o responsável por desenvolver a UI (Template) uma visão clara da camada de dados sem precisar conhecer a mesma…

A idéia geral é baseada em uma única, simples e resumida idéia de que todos os componentes envolvidos em um dado processo devem ser completamente burros. Em suma, não deve existir qualquer tipo de conexão intelectual entre nenhum dos participantes do modelo arquitetural. Você pode até me dizer que esta é uma premissa antiga, mas te respondo que esta merda nunca é seguida a risca!

Uma forma simples de explicar esta implementação e as facilidades do DTD é dizendo que meu template tem que saber o que quer do banco de dados porém não deve de forma alguma se preocupar com como diabos estes dados estão sendo printados ali, quais os adapters, transações, processos, servidores, serviços, linguagens ou qualquer outra parafernalha envolvido neste fluxo.

Modelo Burro

Modelo Burro

No modelo acima, nenhum dos componentes possui qualquer conhecimento sobre o funcionamento ou mesmo localização dos demais objetos, porém, tem total conhecimento do que ele precisa para desempenhar o seu papel corretamente. Idealmente, poderiamos construir a Interface inteiramente apenas utilizando o HTML que foi utilizado para prototipar o sistema contanto que este HTML contenha instruções em sua marcação que indique a forma que o bind deverá ser realizado.

DTD trick

A história do DTD na arquitetura é bem simples, ao construir um template/protótipo/página html, o designer ou programador responsável por esta tarefa adicionaria o DTD com as entidades mapeadas do banco direto no código HTML que está sendo construindo, para que com isto, seja possível por exemplo um full intelissence das possibilidades de binding e formatos de exibição disponíveis, desprezando assim todo e qualquer conhecimento de negócio ou específico da tecnologia que está sendo aplicado na renderização do template e claro, no bind propriamente dito porém, adicionando esta funcionalidade ao artefato desde sua criação.

Este aproach permite também que, por exemplo,  a linguagem base que é utilizada pela equipe seja alterada da noite para o dia sem alteração alguma de programação na UI. Ok, este não é um caso lá muito comum.. Isto se você não trabalha onde eu trabalho! :D

Como dito anteriormente, o DTD deve refletir as entidades e a visão relacional do banco de dados e ser atualizado com a mesma frequencia que qualquer outra entidade ou objeto Entity é alterado…

1 <!ENTITY % ProdutoS
2 ” (Produto. |
3 Produto.Nome |
4 Produto.Preco)”
5 >
6
7 <!ELEMENT label %Inline;>
8 <!ATTLIST label
9 %attrs;
10 for IDREF #IMPLIED
11 accesskey %Character; #IMPLIED
12 onfocus %Script; #IMPLIED
13 onblur %Script; #IMPLIED
14 datasource %ProdutoS; #IMPLIED
15 >

O script acima é um escopo do que poderia ser uma mapeamento em DTD da tabela de produtos, onde a mesma seria utilizada para preencher a propriedade “datasource” do objeto “label“.. No Visual Studio, o intellisense nos daria algo do tipo:

IntelliSense Custom DTD - Visual Studio 2008

IntelliSense Custom DTD - Visual Studio 2008

Este artigo é parte dos pre-requisitos para um o artigo que tende a ser o principal do Blog. Frankie is coming soon, get ready!

Considerações finais

O python tem alguns modelos de template bem interessantes os quais recomendo ao menos a leitura das idéias do Genshi

Mais em: http://wiki.python.org/moin/Templating

<!ENTITY % ProdutoS
” (Produto. |
Produto.Nome |
Produto.Preco)”
><!ELEMENT label %Inline;>
<!ATTLIST label
%attrs;
for         IDREF          #IMPLIED
accesskey   %Character;    #IMPLIED
onfocus     %Script;       #IMPLIED
onblur      %Script;       #IMPLIED
datasource  %ProdutoS;      #IMPLIED
>

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: