Jails 2 – Release Triton

Estátua de Mármore do Deus Triton

 

 

Galera, é com muito prazer que vos informo que o Jails foi bem sucedido, e está indo para sua versão 2!


Agradecimentos

Antes de tudo queria agradecer à todos que contribuíram de alguma forma, seja por uma mensagem de confiança, seja por reply em posts sobre o assunto, dando stars no github, emails, ou mesmo usando e me dando feedbacks!

A Versão

Embora o funcionamento seja bem parecido com as outras versões, esta possui algumas mudanças significativas e por isso a necessidade de um update major no versionamento.

Um parênteses aqui, já me perguntaram sobre os codinomes. Os codinomes que escolhi são nomes de personagens da mitologia grega, as versões 0.0.x, e 0.1.x usavam nomes de heróis por serem versões mais iniciais, modestas. Esta é a primeira versão mais robusta ( por ter passado por um período de experiência ) então usa o codinome de um deus.

Mudanças

Ele está bem melhor agora e o mais surpreendente é que está menor o.O. Isso porque a grande mudança é o fato de que agora só existem Componentes. Removi completamente a necessidade de se criar as Apps Controllers.

Após alguns feedbacks, percebi que em alguns casos era difícil saber se o que estava fazendo deveria ser uma controller ou um componente. Quando era criado o componente e logo após a especificação mudava ou ele era colocado em outro contexto, era necessário usar métodos de controller que ele não possuía. Então precisava de um refactory desnecessário e mudar de componente para controller, tanto no arquivo, na pasta que ele estava e no markup.

Então, a conclusão que cheguei foi de que o melhor mesmo seria seguir pelo caminho mais correto, inclusive o caminho que grandes players estão indo, como é o caso do React, Angular2, Vue.js, o caminho dos componentes.

Consequências

A consequência direta disso é que tive de abrir mão para o fato de que os componentes agora deveriam se relacionar, e poderá existir um acoplamento maior. Como são utilizados eventos, ao remover um componente de um contexto, na prática o javascript NUNCA quebra, não dá erro já que o sistema utiliza sistema de mensagem por eventos, portanto, se alguém não grita, ninguém escuta… e isso é fantástico.

O repositório dos componentes e módulos precisou de um branch novo, pois após o upgrade da versão, os antigos não iam funcionar, então todos os componentes residem agora no branch v2. Aproveitei pra remover os que não eram usados, melhorar a performance e a documentação, dei uma enxugada.

Outra mudança que ajuda muito é o fato de que agora os componentes podem ouvir uns aos outros, não só os filhos, quanto os que estão no mesmo nível do markup.

Brasil! Mostra a sua cara!

Chega de falar de forma abstrata e vamos mostrar um pouco da cara de um componente nessa versão maravilhosa.

Vamos criar novamente um dialog, um modal com texto dinâmico, estou sem criatividade para exemplos como podem ver xD.

O html:

<div class="dialog" data-component="view modal">
    <h2>Olá <span data-value="{name}">Fulano</span>!</h2>
</div>

Olha que coisa linda do pae…

O componente de modal vai botar uma classe “open” ou removê-la, e possui os métodos públicos open() e close() olha só:

import jails from 'jails'

jails('modal', ( component, element, anno )=>{

	component.init = ()=>{}

	component.open = ()=>{
		element.classList.add('open')
	}

	component.close = ()=>{
		element.classList.remove('open')
	}

})

Dá para ver que não existe mais o jails.component agora tudo é componente, então seria redundante, o objeto Jails virou uma função. Outra diferença é que o jails possui traços ainda mais funcional do que antes.

Diferentemente das outras soluções como o React ou Angular2 que estão seguindo uma linha mais de Classes e herança, o Jails vem numa pegada um pouco mais funcional e de composição. Agora não precisa mais criar mixins usando a keyword this. Você vai decorando o objeto component que recebe.

Agora o Dialog é o componente que fará a lógica de abrir e fechar o modal de acordo com algum contexto, seja um click ou algum resultado de um feedback. Vamos fazer ele abrir via pub/sub, escutando o evento global dialog:open.

Não precisamos mais pensar em criar controllers e adicionar um wrapper pra esse div que criamos, basta inserir mais um elemento na lista de componentes:

import jails from 'jails'

jails('dialog', ( component, element, anno )=>{

	let view, modal
	
	component.init = ()=>{
		view  = component.get('[data-component*=view]')
		modal = component.get('[data-component*=modal]')
		
		component.subscribe('dialog:open', open)
		component.subscribe('dialog:close', close)
	}

	let open = ( data )=>{
		modal('open')
		view('update', data)
	}

	let close = ()=>{
		modal('close')
	}

})

Não é fabuloso? Não é simples? Não é maravilhoso?

Uma coisa que pouco se fala em conferências e palestras. Como fazer um BI desacoplado? Você costuma botar os códigos ga na lógica do seu módulo?

Eu prefiro não fazer isso, e com o Jails é mais simples e modular ainda, basta criar um componente numa pasta track/modal para todos os modais do site, e ficar escutando ou os eventos customizados de abrir e fechar, ou os próprios eventos de click no dom, se precisar.

Você pode adicionar esse tracking ou remover do data-component  no seu html. Além de organizar melhor seus arquivos, você não precisa inserir na lógica do seu módulo os trackings

Finalizando…

É isso galera, só queria compartilhar com vocês essa versão nova e minha alegria de ver que realmente funciona… a idéia toda casou completamente com a necessidade que temos na equipe que trabalho, e tem me dado muita alegria nesses últimos tempos.

É simples, se propõe a resolver pequenos problemas e esse é o diferencial dele, é muito fácil conversar com outras bibliotecas e pra mim, faz todo o sentido do mundo você conseguir compor sua aplicação com diversas bibliotecas em paralelo… é isso que não consigo ver muito bem nesses frameworks muito parrudos, você fica muito preso à um só paradigma.

Tive de atualizar toda a documentação, mas ficou muito mais simples tanto de escrevê-la como de entender o próprio micro-framework, coisa que agora vejo, não estava muito fácil antes.

Tudo o que precisam saber no caso de se interessar está aqui: https://github.com/jails-org/Jails

Ficaria muito feliz com qualquer tipo de contribuição, e ficaria mais contente se fosse tão útil para vocês quanto está sendo para mim.

Um grande abraço

Valeu!

Anúncios