Arquitetura e estratégias para a integração de aplicações corporativas
Conhecer bem suas aplicações é fundamental para uma arquitetura que reduza custo de manutenção e alcance níveis aceitáveis de operação pelo usuário.
Quando desenvolvemos aplicativos corporativos, devemos sempre levar em consideração os mais diversos cenários e dispositivos utilizados em campo pelos usuários finais. Preocupações com o consumo de dados, desempenho da aplicação, disponibilidade e a garantia de que a informação esteja disponível em tempo para as tomadas de decisões da organização são extremamente importantes.
Tendo isso em mente, devemos sempre nos preocupar em escolher as melhores abordagens de arquitetura na construção da aplicação, levando em consideração não apenas os diferentes recursos de hardware e rede, mas também o dinamismo do domínio da aplicação.
Vamos abordar aqui estratégias para o tratamento dos dados trafegados entre o servidor e a aplicação móvel que podem ser adotadas de forma a beneficiar sua aplicação.
JSON vs Binário
O padrão JSON (Javascript Object Notation – Notação de objetos baseados no padrão JavaScript, em tradução livre) vem sendo cada vez mais utilizado e incentivado na comunidade de desenvolvimento como uma alternativa para representação de objetos. Por ser um padrão simples e enxuto, traz uma boa alternativa de tratamento de dados que podem ser facilmente interpretados entre as mais diversas linguagens e plataformas de desenvolvimento.
Hoje encontramos facilmente bibliotecas para as mais diversas linguagens de programação que fornecem recursos pouco ou nada burocráticos para a serialização e a desserialização dos objetos, tão ou mais eficientes que os tradicionais serializadores de XML.
Quando um desserializador JSON recebe a string que representa o objeto, ele encontra as propriedades equivalentes e apropria seus respectivos valores, e quando uma propriedade não está presente ou possui um valor com tipagem incompatível, essa propriedade é carregada com o valor padrão pela linguagem.
Esse comportamento possibilita que o JSON possa ser utilizado em diferentes versões do objeto, trazendo grande flexibilidade para evolução do domínio sem prejudicar a compatibilidade com o seu legado.
Apesar da flexibilidade obtida na utilização de objetos JSON, esses objetos requerem mais recursos de processamento para interpretação e maior alocação de espaço devido ao seu tamanho, quando comparados a outros modelos, como o de pacotes de valores binários sequenciais (como os utilizados nas camadas de baixo nível que requerem alto desempenho – cabeçalhos TCP, por exemplo). Isso se dá principalmente pelo fato de o objeto, quando no formato JSON, ser apresentado em alto nível, sendo tão legível quanto a linguagem natural utilizada na declaração do objeto de domínio no seu código.
Já a utilização de serialização dos valores de forma binária e sequencial é mais facilmente interpretada com menor custo de processamento, além de fornecer pacotes pequenos, que trazem economia no volume de dados trafegados, requerem menor abertura de banda e, consecutivamente, favorecem a menor incidência de repetição da transmissão do pacote.
Nesse modelo, os valores a serem trafegados são serializados sequencialmente em uma ordem específica, e quem o interpreta deve apenas lê-los na mesma ordem. Como são trafegados apenas os valores dos dados, os nomes das propriedades não são relevantes, contanto que a ordem seja respeitada. Além disso, os dados ocupam apenas o mínimo de bits necessários para a representação de seu tipo, sendo mais econômicos que representações feitas pelas cadeias de caracteres dos modelos textuais.
A principal desvantagem desse modelo é justamente o forte relacionamento que existe entre a ordem dos dados serializados, o que cria dificuldades de alteração e evolução dos objetos de domínio conforme eles vão se tornando mais complexos. A interpretação de bytes em posições erradas pode causar sérios problemas com os valores lidos, podendo gerar informações inverídicas e até comprometer a segurança das informações, expondo dados onde eles não deveriam ser exibidos.
Dessa forma, precisamos sempre cuidar do controle de versionamento dos objetos, e muitas vezes criamos maiores complexidades e dificuldades de manutenção do código.
Escolhendo a melhor abordagem para o seu cenário
Um ponto importante a ser observado para a escolha adequada do formato de serialização de dados é o dispositivo móvel alvo. Apesar do considerável aumento do poder de processamento e memória dos celulares atuais, muitas empresas optam por dispositivos mais baratos e menos poderosos para compor seu parque de aparelhos ou simplesmente não querem investir em celulares modernos para a sua operação. Diante desse cenário, a maneira como você irá decidir trafegar as suas informações vitais influenciará diretamente no sucesso de sua aplicação corporativa, além de definir se você conseguirá essa fatia do mercado que utiliza dispositivos simples.
A serialização binária tem uma grande vantagem em relação à serialização de objetos com JSON: desempenho. O processo de serialização e desserialização de objetos JSON consome muito mais recursos do dispositivo alvo e, dependendo da quantidade de dados trafegados, pode causar sérios problemas de desempenho da aplicação. Limitações dos pacotes de dados também devem ser levados em consideração, pois o processo de serialização binária é mais enxuto e consome menos da banda disponível.
Em contraponto, a serialização binária é mais trabalhosa de ser implementada. O protocolo de comunicação entre as camadas WEB e mobile precisa ser definido com assertividade, e isso exige que o domínio do negócio esteja consolidado, o que geralmente só acontece nas iterações finais do projeto. Caso as linguagens utilizadas na camada móvel e na camada WEB sejam diferentes (por exemplo, um aplicativo feito em Java se comunicando com um backend C#) isso irá gerar um trabalho extra para a criação de uma camada de interpretação dos objetos trafegados. Isso acontece porque o formato para a definição binária dos tipos primitivos e strings pode variar de linguagem para linguagem.
A serialização JSON, por sua vez, tem uma grande vantagem em relação à serialização de objetos binária: flexibilidade. Se você está construindo uma aplicação em que o domínio sofre constantes alterações, novos componentes são criados a cada iteração e precisam ser trafegados entre as camadas WEB e mobile, você precisa de um formato de serialização flexível para economizar tempo de manutenção e imprimir agilidade no desenvolvimento das novas funcionalidades.
Se memória e processamento não são problema nos dispositivos alvo ou o domínio é volátil, opte por um formato flexível como JSON para serializar os objetos que devem ser enviados do celular para a camada WEB.
Agora se a aplicação tem a pretensão de atingir os devices conhecidos como low-end ou existe preocupação com o plano de dados disponível para a operação, a serialização binária deve ser considerada. Lembrando que essa abordagem tem um melhor desempenho, mas gera muita manutenção no código.
Conclusão
Aplicações não corporativas possuem uma maior tolerância a falhas e pequenas oscilações de desempenho, enquanto aplicações corporativas tendem a operar com muito menos tolerância a essas intempéries, já que muitas vezes impactam diretamente na produtividade e na qualidade do trabalho nas empresas.
Conhecer bem o cenário de utilização de sua aplicação é fundamental para a adoção de uma abordagem e uma arquitetura que reduzam o custo de manutenção e alcancem os níveis aceitáveis de operação pelo usuário final.
***
- Artigo feito em conjunto com Rafael Silveira, líder técnico do time de desenvolvimento mobile da Prime Systems. Bacharel em Ciência da Computação e especialista em Engenharia de Software pela UFMG, é consultor em desenvolvimento de aplicações móveis com mais de 10 anos de experiência em desenvolvimento em diferentes plataformas. Atualmente leciona também em cursos de Sistemas de Informação.
- Artigo publicado originalmente na Revista iMasters.







