AlienDroid – ActiveRecord

Eu já comentei pelo meu Twitter sobre o AlienDroid, certo? Publiquei o link para o projeto e tudo mais. Só fiquei devendo um post aqui no blog explicando melhor o projeto e como ele funciona. Então, vamos pagar esta dívida agora. Lembram do DemoDroid? Foi uma tentativa minha de criar um pequeno framework para desenvolvimento em Android. Usei ele na criação do EncomendaZ e do BrasileirãoZ.

O DemoDroid estava até bacana, mas comecei a perceber que ele acabava criando mais uma complexidade no desenvolvimento. E achei ele um pouco pesado também. Percebi que os projetos Android normalmente são pequenos, possuem poucas entidades para persistir e tal. E o DemoDroid não levava isto em consideração. Acabava criando umas camadas extra desnecessárias. Por exemplo, não sou muito a favor de criar Business Controllers, DAOs e etc em projetos Android. Prefiro usar o padrão ActiveRecord com Models. Resolve o problema facilmente, é elegante, e deixa o código limpo.

Partindo destas premissas, abandonei o DemoDroid e fiz o AlienDroid. Desta vez, quero modularizar mais as coisas. Separei o projeto em, até agora, dois módulos. O primeiro é o Core. Este módulo é minúsculo. Pouquíssimas classes e que são mais de suporte para os demais módulos. Por exemplo, temos o módulo ActiveRecord para persistência de objetos. Você conhece o padrão de projeto ActiveRecord? Não? Quem já usou o Ruby on Rails conhece bem. Para aprender mais, visite a página do Martin Fowler sobre este padrão: ActiveRecord.

Agora, vamos começar a usar o AlienDroid. Primeiro, você pode usar ele pelo Maven. Ou sem Maven mesmo. Já publiquei o projeto no repositório de snapshots da Sonatype. Basta você ter uma dependência assim no seu projeto:


    com.alienlabz
    aliendroid-activerecord
    1.0.0-SNAPSHOT

Caso não use o Maven, você precisa de alguns arquivos. Primeiro, baixe estes dois: aliendroid-core.jar e aliendroid-activerecord.jar. Adicione eles na pasta /libs de seu projeto Android. Você precisa também das libs do RoboGuice:

  1. RoboGuice 2 Download
  2. Guice 3 No AOP
  3. JSR 305
  4. javax.inject

Agora, você precisa de uma classe que estende de android.app.Application. Crie ela e no método onCreate, faça uma chamada para AlienDroid.init(this). Com esta linha, você está iniciando o AlienDroid. E não se esqueça de referenciar esta nova classe no seu AndroidManifest.xml, hein! Pronto, meu caro. Agora basta você criar suas classes de Model estendendo de com.alienlabz.activerecord.Model. Vamos a um exemplo:

public class Contact extends Model {
    public String name;
    public Date birth;
    public Integer age;
}

E agora? Faço o que com esta classe? Vamos ver agora.

public MyActivity extends RoboActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Contact contact = new Contact();
        contact.name = "My Name";
        contact.birth = new Date();
        contact.age = 21;
        contact.save();
    }
}

Só isso? É, cara pálida. Só isso mesmo. O AlienDroid vai criar um banco de dados chamado database.sqlite para você. E também vai criar uma tabela Contact automaticamente. Você pode fazer consultas assim, ó:

public MyActivity extends RoboActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Contact contact = Model.load(Contact.class, 1);
        contact.name = "Changed Name";
        contact.save();

        List contacts = Model.findAll(Contact.class);
        List contacts = Model.where(Contact.class, "name like ?", new String[] {"name"});

        contact.delete();
    }
}

Curtiu? Eu também! 🙂 Quer tirar mais dúvidas? Quer usar o projeto? Quer ajudar? Então, entra em contato comigo. Pode ser pelo meu Twitter, Facebook, E-mail ou sei lá!