Front End

27 mai, 2014

Node.js: estruturando suas aplicações

Publicidade

luz

Um assunto bem intrigante e de fato interessante são as estruturas que você cria para suas aplicações, afinal o node.js mais o npm lhe dão um leque enorme de opções. Mas acredito que somente começar uma aplicação, inserir vários módulos e começar a codificar não é o suficiente para criar uma estrutura saudável.

O problema

Quando você tem vários pedaços de código e não tem uma disciplina forte de como gerenciar todos eles, você pode acabar se afogando em sua própria criação.

A solução

Criar um forte vínculo com o ato de pensar no que está colocando dentro da sua aplicação é o primeiro passo para controlar o caos, agregado a isso uma visão analítica. É preciso analisar quais são as necessidades do projeto internamente e externamente, fortalecer a qualidade do processo e manter cada parte interoperável, como um grande ecossistema.

Para que fique mais claro, vamos imaginar essa produção da seguinte forma: uma semente cai, os dias passam e as estações vem e vão. Uma árvore cresce, simplesmente sem um propósito. Ela simplesmente está ali. Afinal, ela não tem uma consciência.

Mas você que possui consciência (e muito mais do que isso: sabe que aquela árvore necessita que você cuide dela e auxilie no processo de manutenção e expansão daquela floresta), começa a utilizar técnicas para conduzir o processo de modo natural, utilizando soluções nativas de sua natureza interna e daquela que é externa.

Vamos a proposta de organização baseada no MVC

Suponhamos que você esteja utilizando o Express para criar a sua aplicação, então teremos as seguintes possibilidades:

A estrutura

  • modules/
  • middlewares/
  • models/
  • controllers/
  • views/
  • routes/
  • fixtures/
  • config/
  • test/
  • bin/
  • doc/
  • index.js

O interessante, é manter a conveniência de utilizar a estrutura em inglês para manter a coerência semântica, que auxilia o processo de memorização e mapeamento de todo o processo e empodera a mesma com uma fluidez incrível.

Modules

galt-classic-first-bricks

Em modules você vai colocar partes do código onde a resolução do problema é a nível de algoritmo, utilizando recursos nativos da linguagem, como estruturas baseadas em objetos padrões, ou até mesmo a lógica de negócio, que exige apenas o processamento das entradas ou algo relacionado. Lembrando sempre que cada pedaço deve manter o princípio de responsabilidade única, onde se faz uma coisa de cada vez e não tudo em um lugar só.

Neste ponto você percebe que a analogia da árvore já se aplica ao que estamos fazendo, utilizando técnicas simples de organização para empoderar não só uma, mas todas que fizerem parte do projeto.

Middlewares

needle_2212555b

Os middlewares têm um propósito similar ao dos modules; a única diferença é que eles têm o impacto na estrutura lógica do Express e têm o objetivo de serem ativados em meio ao processo de requisição http pelo qual eles foram atribuídos. O restante da operação pode ser feita utilizado o mesmo princípio dos modules ou até reutilizá-los em seus middlewares. Lembrando que, cada faz apenas uma única tarefa.

Models

Greek_girl_sculpture_view_5

Também muito similar aos modules, os models têm como objetivo arramar a lógica de processamento à entrada e saída de dados, sistemas de mensagens, paralelismo e afins. Todos eles estão relacionados a interoperabilidade da aplicação.

Controllers

Nes-controller-2

Os controllers têm como principal objetivo reunir componentes construídos com base nos conceitos anteriores e direcioná-los ao seu objetivo. Por exemplo, a consolidação da entrega de uma view ou uma coleção de dados para um web service.

Views

oblivion4

As views têm como objetivo processar a lógica da interface e entregar aos seus clientes. Ela não é necessária para o web services, mas tem um grande poder se você estiver criando uma aplicação que demande a entrega deste propósito. E que inclusive, tem uma sub-lógica utilizando uma template engine, onde você estrutura os dados em uma interface de usuário.

Routes

utah_road

As routes devem endereçar a lógica a nível de linguagem utilizando a interface de comunicação baseada no http. Por exemplo, ao acessar uma URL, basicamente você acessa um endereço que é imediatamente ativado para processar um conteúdo programado previamente para tal objetivo.

Fixtures

Tool_Box

A uma camada quase que acessível apenas para o programador, os fixtures servem para que você crie pedaços de código que ajudam a automatizar tarefas. Alguns exemplos de tarefa são o backup de banco de dados, importação de dados, iniciação da aplicação, distribuição de nós etc. Mas isso vai depender da sua disposição ao encarar isso como uma real necessidade.

Config

1_枯山水1-1

Esta peça é importante para armazenar as principais informações que dão origem a iniciação do projeto ou chaves de segurança, que serão armazenadas e ignoradas pela ferramenta de controle de versão – e as possibilidades são infinitas.

Test

Essa é uma das partes cruciais para que você construa um jardim similar a este:

800px-Saihouji-kokedera01

Aqui é onde você controla cada parte específica, testando a unidade e o comportamento do código e o comportamento da interface e estresse da aplicação, todos baseados no princípio de testar somente o que você programar e casos que estejam ao alcance do funcionamento básico, definidos em um escopo previamente definido.

Bin

Arrow-Firefly-showdown-photo

Este é o gatilho do maquinário de operações, onde o processo de ativação pode ser manual ou automatizado, e também pode armazenar a automação de tarefas de verificação de complexidade, sintaxe, execução e até mesmo a execução dos testes antes de reiniciar uma aplicação. Aplicação essa baseada na base de código que você criou, prevenindo qualquer problema de execução, uma vez que contém algum tipo de mau funcionamento. Para evitar esse tipo de problema, utilize ambientes de simulação do ambiente real.

Doc

letterwriting

Esta parte tem uma grande utilidade: basicamente você armazena as informações de como utilizar a API de cada componente, execução da aplicação, instalação, exemplos e todo o tipo de conhecimento que vai te ajudar a livrar sua memória de informações que você não precisa mais – com isso ela deixa espaço para novos itens. A linguagem precisa ser simples e objetiva porque outras pessoas podem utilizar as suas referências e melhorar ou corrigir erros.

Entry-point

fig_saturn

Um ponto de entrada, que no caso é o arquivo index.js, serve como um núcleo de um corpo gravitacional, onde tudo está circulando ao seu redor por conta do seu peso em importância e por ele ser o ponto de ligação para qualquer parte da aplicação. Por exemplo, iniciar conexões com bancos, outros servidores, tarefas em plano de fundo, tarefas agendadas em plano de fundo, configurações e disponibilização do acesso a API desse ponto de entrada.

Conclusão

Essa é uma estrutura totalmente abstrata e que você pode utilizar de modo agnóstico na linguagem. Quanto mais você melhorar, mais você evolui em qualidade e velocidade com as características do seu software. Utilize com criatividade, mas com moderação, para que não custe bem caro. Mas lembres-se: sempre procure discutir com todo o time esse tipo de estrutura para evoluir progressivamente.