Skip to content

MiddleHeaven e Java 8

20 de Abril de 2014

O projeto Middleheaven nasceu como uma biblioteca auto-suficiente para criar qualquer tipo de programas em java. A experiencia mais interessante do projeto o design. O design começou quanto estavamos no java 1.4 , e nessa época a API padrão do java era bem pobre em certos aspectos. Ao longo do tempo as APIs JSE e JEE eoluiram muito e hoje muitas as coisas que o middleheaven oferece já estão na api padrão. Exemplos são um codificador de base 64 , api de temos e datas, api de arquivos, entre outras.

Eu sabia que chagaria o tempo em que as apis do middleheaven poderiam ficar obsoletas, mas tendo em consideração a primeira diretiva que é fazer o programa depender exclusivamente do middleheaven de forma a encapsular toda a tecnologia, a api do middleheaven teria que evoluir junto com a api padrão. Por exemplo, agora que o  java 8 contém um codificador base 64, a api do middleheaven pode simplesmente delegar as funcionalidades e não ter que implementar esse recurso por si mesma. A api de arquivos se integra com a api de servelets para manipular arquivos obtidos por upload do usuário , a api padrão do java faz isso. A api de datas e tempos pode agora confiar todos os calculos à nova api de datas e tempos mantendo apenas os objetos . O plano funcionou.

Muito da API do middleheaven foi construida com base no conceito de lambda, mesmo quando ele ainda era só um rumor. Agora, graças à funcionalidade do java 8 de entender lambdas como SAM types podemos usar lambdas com a API de enumerable. Um recurso que muito provavelmente será útil é o recurso de virtual extension methods quando formos para a versão 2.

Pois, é isso ai. Embora a versão 1 não seja usada cabe transformá-la para tirar proveito do java 8 e como tal é preciso renomeá-la para versão 2.

Uma das dificuldades do projeto é a parte de UI. Existe alguma integração como algumas ferramentas como Freemarker e Vaadin, mas não ha um modelo coeso para a UI. Isto principalmente se deve ao problema do modelo 2 (action based) vs modelo 3 (event based) . O modelo 2 é completamente suportado , mas o modelo 3 não.

Em alguns pontos ha que se afastar da api do java pelo menos enquanto não existirem extensiom methods verdadeiros como em C#. Um desses exemplos é o conceito de Optional / Maybe. O Maybe do middlheaven pode ser estendido pelo middleheaven enquanto o Optional está nas mãos da Oracle que não o levou muito longe. Sim, ambos partilham problemas – como o fato de que a linguagem não garante que a própria variável to tipo maybe/optional não será nula – mas a api de maybe pretende fazer uso extensivo de lambdas e se integrar com a api de enumerab le para permitir um código mais simples e direto.

Depois de investir tanto tempo no projeto middleheaven é custoso pensar em investir ainda mais para o manter a par com o java 8 quanto na realidade ele não é um framework tão usado quanto outros, contudo depois de muito pensar chego à conclusão que o investimento já foi feito, mais vale tirar partido dele. Tal vez programando o framework em outra linguagem ou usando outra linguagem durante o uso serviria para desacoplar ainda mais o framework e realmente fazer as aplicações não dependerem da linguagem ou plataforma subjacente. Depois de procurar não achei uma linguagem que pudesse permitir isto e minha conclusão se aproxima mais e mais da conclusão que para dar certo deveria existir uma “middleheaven language” em que o framework serve como a API que desacopla a tecnologia. Contudo esta conclusão levaria ainda a mais trabalho que não é compensado pelo numero de usuários do framework. Portanto continuarei nos passos de manter o middleheaven desacoplado da teclogia subjacente, mas ainda sendo programado e usado via linguagem java e correndo na plataforma java. Contudo cada vez mais tentando se afastar de algumas falhas que existem na api padrão e que outras linguagens/apis fizeram melhor.

Deixe um Comentário

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: