Android, iOS, Windows Phone? Como você organiza seu código mobile?

Posted by rlecheta on fevereiro 23, 2013
Tutorial

Olá Pessoal,

Na Livetouch  temos muitos projetos mobile, e desenvolvemos para todas as plataformas.

Consequentemente temos que organizar nossos projetos, padronizar o código, e principalmente criar um padrão para facilitar com que os novos desenvolvedores, as vezes não acostumados com uma ou outra plataforma, consigam aprender tudo rapidamente.

Para exemplificar, vamos imaginar que precisamos salvar nas preferências do usuário algum valor simples (aquela classe simples de chave/valor que armazena no banco de dados).

No Android é utilizado a classe SharedPreferences, no iOS é a classe NSUserDefaults e no Windows Phone a IsolatedStorageSettings. Essas classes são simples, mas você precisa conhecer a API nativa para utilizá-las.

Então se um desenvolver Android X for lá no código e utilizar diretamente a classe SharedPreferences, como ele fará quando tiver que fazer o mesmo para iOS ou Windows Phone?

Ou se você é responsável por uma equipe mobile, como você garante que todos os desenvolvedores, ou as vezes aqueles que entraram para aprender, estagiários, etc, vão aprender o mais rápido possível? Como você garante que a produtividade será sempre alta, mesmo em uma nova plataforma?

Por isso eu gosto de padronizar algumas coisas, principalmente tarefas repetidas e comuns que sempre vai existir, independente da plataforma.

Para solucionar o problema das classes SharedPreferencesNSUserDefaults e IsolatedStorageSettings, vamos pensar que existe uma classe Prefs que encapsula este acesso, escondendo a API nativa do desenvolvedor.

No Android (java), essa classe poderia ser utilizada da seguinte forma.

// Salvar
Pref.setString(getContext(), “chave”, “valor”);

// Ler
String valor = Pref.getString(getContext(), “chave”);

No iOS (objective-C), se essa classe também existir, a tarefa continua simples:

// Salvar
[Prefs setString:@”chave” valor:@”valor”];

// Ler
NSString *valor = [Prefs getString:@”chave”];

E no Windows Phone (C#), qual classe vamos utilizar? Advinha:

// Salvar
Prefs.setString(“chave”, “valor”);

// Ler
String s = Prefs.getString(“nome”);

A vantagem é que não preciso conhecer a API nativa, ou me lembrar de cabeça como é que chama o método X ou Y. Basta lembrar que existe essa classe utilitária.

Este conceito de encapsulamento para esconder o código nativo facilita muito o trabalho. Você pode criar muitos padrões legais, principalmente utilizando interfaces/protocolos.

Acho que deu para entender a ideia, e na prática funciona assim:

1) Um cara novo de mobile entra na equipe e aprende Android, ou outra coisa.

2) Junto com a arquitetura do Android e coisas específicas, ele aprende a utilizar diversas classes prontas, que facilitam determinado trabalho.

3) Depois ele precisa aprender outra plataforma.

4) Ok, coisas específicas ele precisa aprender, mas as mesmas classes padronizadas estarão lá, a sua disposição.

Então se você precisar enviar um email, como fazer? O pessoal sabe que basta procurar uma classe EmailUtils, que costumamos dizer, (*)Utils.

Essa organização acredito ser uma tendência natural, a medida que a empresa começa a fazer aplicativos para diversas plataformas.

Não estou dizendo que tudo precisa ser encapsulado aqui, não vamos ser muito rigorosos :-), até porque cada plataforma possui suas peculiaridades e recomendações, mas para muitas tarefas este conceito pode ser utilizado, e pelo menos aqui tem dado certo.

E lembre-se, isso que estou falando vale para código, regras de negócio, tarefas comuns, etc, e não para a interface/design das telas. Sobre UI Guidelines, cada plataforma possui a sua, e é aquela que os usuários estão acostumados… Mas isso é uma outra conversa já muito batida.

O que vocês acham, alguém costuma fazer assim?

abraços

2 Comments to Android, iOS, Windows Phone? Como você organiza seu código mobile?