Android ORMs

Boa Noite Guj’s.

Sou novo por aqui, então se estiver fazendo algo de errado me alertem.

Olhei alguns tópicos do fórum, porém não obtive conclusão. Estou fazendo uma pequena aplicação (Primeira que vou publicar), e cheguei na etapa em que é necessário manipular dados, porem surgiu algumas dúvidas em relação ao uso de ORMs. Gostaria da opnião de vocês em relação a ORMs, dicas, sugestões, se é devo ou não utilizar o mesmo, se a utilização dele pode descarregar a bateria com mais facilidade por estar utilizando um framework, se é vantajoso ou não mesmo sendo um aplicação de pequeno porte.

Desde já agradeço pela ajuda.

Eu não gosto da ideia de usar um ORM pra Android. Usar um significa abusar de reflexão em um ambiente que precisa ser otimizado pra não consumir muitos recursos do dispositivo (lembrando que a reflexão não pode ser otimizada pelo JIT - que já está presente desde o Android 2.2).

Eu sugiro que você estude muito bem o ORM que quiser utilizar para ver se não existe uma perda notável de desempenho do aplicativo, principalmente em dispositivos mais antigos, e veja exemplos de como usá-lo para não colocar um monstrinho que vai exigir que você mude a estrutura das suas classes só pra usar a persistência. O Sugar ORM é um bom exemplo disso (é intrusivo demais):

[code]public class Book extends SugarRecord<Book> {
String title;
String edition;

public Book(Context ctx){
super(ctx);
}

public Book(Context ctx, String title, String edition){
super(ctx);
this.title = title;
this.edition = edition;
}
}

Book book = new Book(ctx, “Title here”, “2nd edition”)
book.save();

Book book = Book.findById(Book.class, 1);
[/code]

[quote=Ataxexe]Eu não gosto da ideia de usar um ORM pra Android. Usar um significa abusar de reflexão em um ambiente que precisa ser otimizado pra não consumir muitos recursos do dispositivo (lembrando que a reflexão não pode ser otimizada pelo JIT - que já está presente desde o Android 2.2).

Eu sugiro que você estude muito bem o ORM que quiser utilizar para ver se não existe uma perda notável de desempenho do aplicativo, principalmente em dispositivos mais antigos, e veja exemplos de como usá-lo para não colocar um monstrinho que vai exigir que você mude a estrutura das suas classes só pra usar a persistência. O Sugar ORM é um bom exemplo disso (é intrusivo demais):

[code]public class Book extends SugarRecord<Book> {
String title;
String edition;

public Book(Context ctx){
super(ctx);
}

public Book(Context ctx, String title, String edition){
super(ctx);
this.title = title;
this.edition = edition;
}
}

Book book = new Book(ctx, “Title here”, “2nd edition”)
book.save();

Book book = Book.findById(Book.class, 1);
[/code][/quote]

Atualmente, tenho a mesma impressão de não utilizar ORM pra android, porém o objetivo foi pesquisar sobre vantagens e desvantagens dele, e por fim verificar se é aplicável a um determinado projeto.

Em relação a sugestão dei uma olhada breve. Estou implementando um aplicativo e vou simular a manipulação de dados com SQLite e com o Sugar ORM fazendo vários testes, desde desempenho até o consumo excessivo de bateria do aparelho. Ao fim da pesquisa vou postar o resultado neste tópico.

Obrigado pela sugestão Ataxexe!

Aproveite e teste outros ORMs também. Eu achei esse Sugar ORM muito intrusivo e, por mais que ele seja rápido e tudo o mais, eu não me vejo adotando ele em um projeto.

Eu, sinceramente, sou fã do projeto AndroidAnnotations. Eles usam anotações para pré-processamento, ou seja, geram código no momento da compilação. Isso remove totalmente a necessidade de reflexão. Eu só acho que usar uma abordagem dessas para construir um ORM seria muito complicada de manter… mas seria muito bacana.

Dei uma olhada em alguns ORMs e achei esses dois aqui e acho que você poderia dar uma olhada neles:


http://ormlite.com/sqlite_java_android_orm.shtml

Eu não cheguei a olhar os fontes pra ver como eles funcionam, mas achei muita gente comparando eles e parecem estar bem ativos e utilizados.

kevin_nasc, chegou a fazer todos esses testes? Qual ORM decidiu usar?

ORM em apps moveis? Fala. sério.

São os vícios.

Mudança de hábito é sempre complicado né?

o fato é que desenvolvimento mobile é mais parecido com programação embarcada e menos parecido com software corporativo.

Mudança de hábito é sempre complicado né?

o fato é que desenvolvimento mobile é mais parecido com programação embarcada e menos parecido com software corporativo.[/quote]

Complicado mesmo. Isso me lembrou uma vez que eu vi um maluco fazendo um conteiner de injeção de dependências pra Ruby.

Vocês são os bons, né? Patéticos. Se não tem com o que contribuir, não vomitem pelo teclado.

[quote=Ataxexe]
Complicado mesmo. Isso me lembrou uma vez que eu vi um maluco fazendo um conteiner de injeção de dependências pra Ruby.[/quote]

injeção? sinistro…

Conviver com a democracia é realmente algo que precisa ser mais praticado. Principalmente quando somos contrariados.
Os rapazes apenas estavam externando suas opiniões, pertinentes na minha opinião.
Você samerjamal, deveria defender seu ponto de vista, mostrar as vantagens de usar um ORM num aplicativo Android, se tiver números para mostrar que um ORM seja mais performático, por exemplo, seria interessante.

Não seja tão dramático, Gusukama. Você escolheu um “lado” para concordar e não usou a mesma lógica ao analisar a maneira que eles se portaram, desnecessariamente, em relação ao que levantei no tópico (ISSO SIM FOI PERTINENTE, ao menos em relação ao assunto do tópico).

Eu postei algo relacionado ao assunto do tópico, me dei ao trabalho de pesquisar, entrar aqui e postar algo relacionado ao assunto.

Eles se deram ao trabalho de entrar em um tópico de um assunto que eles discordam, apenas para demonstrar a pretensa superioridade deles, sem ao menos questionar o motivo da minha dúvida. Eu poderia muito bem estar fazendo uma pesquisa, ou poderia querer usar a facilidade de um ORM para um simples protótipo, entre outras dezenas de motivações.

Caso eles tivessem acrescentado algo à discussão, certamente eu me portaria diferente. Apenas rebati a arrogância deles.

[quote=samerjamal]Não seja tão dramático, Gusukama. Você escolheu um “lado” para concordar e não usou a mesma lógica ao analisar a maneira que eles se portaram, desnecessariamente, em relação ao que levantei no tópico (ISSO SIM FOI PERTINENTE, ao menos em relação ao assunto do tópico).

Eu postei algo relacionado ao assunto do tópico, me dei ao trabalho de pesquisar, entrar aqui e postar algo relacionado ao assunto.

Eles se deram ao trabalho de entrar em um tópico de um assunto que eles discordam, apenas para demonstrar a pretensa superioridade deles, sem ao menos questionar o motivo da minha dúvida. Eu poderia muito bem estar fazendo uma pesquisa, ou poderia querer usar a facilidade de um ORM para um simples protótipo, entre outras dezenas de motivações.

Caso eles tivessem acrescentado algo à discussão, certamente eu me portaria diferente. Apenas rebati a arrogância deles.[/quote]

Veja que eu não escolhi um lado, eu já tinha um lado, apenas declarei pelo acontecido.
Eles comentaram sobre o tópico, não citaram você em nenhum momento.
Não sou advogado de ninguém, então, (se quiserem) eles podem argumentar por conta própria.

Quanto às suas motivações, podem ser pertinentes, mas se desejar discutir, tem que explicitar. Agora, o que eu levantei é a inutilidade de se trocar “gentilezas” nesse nível. Mas, cada um é cada um.

Eu nem estava me referindo a você. Apenas comentei que é complicado quando não nos adequamos ao que estamos mexendo e dei aquele exemplo. Eu mesmo já fiz muito código em ruby com fedor de java justamente por não me ambientar totalmente com ruby.

Eu respondi esse tópico logo quando ele nasceu e, apesar de ele já ter feito aniversário, minha posição continua a mesma: ORM para Android é a solução para um problema que não existe.

Pessoal, se acham que esses comentários ajudam em algo, agradeço a todos!

Comentaram sobre o tópico? Comentar, comentaram, mas…

Eu não queria discutir nada, apenas perguntei a quem abriu o tópico se ele fez os testes.

E não falo mais sobre o assunto, abraço a todos.

Pessoal, se acham que esses comentários ajudam em algo, agradeço a todos!

Comentaram sobre o tópico? Comentar, comentaram, mas…

Eu não queria discutir nada, apenas perguntei a quem abriu o tópico se ele fez os testes.

E não falo mais sobre o assunto, abraço a todos.[/quote]
Sim foram comentários sobre o tópico, reacendido por consequência de uma nova postagem.

Esses comentários ajudam a reforçar que atualmente ainda existem rejeições ao uso de ORM para mobile.

Então que fossem menos arrogantes e falassem exatamente isso: atualmente ainda existem rejeições ao uso de ORM para mobile.

Se acha que aqueles comentários são a maneira certa de se portar a um colega, bom para todos vocês, continuem assim.

[quote=samerjamal]Eu não queria discutir nada, apenas perguntei a quem abriu o tópico se ele fez os testes.

E não falo mais sobre o assunto, abraço a todos.[/quote]

Se não queria discutir nada, por quê postou em um forum de discussões? Teria sido até melhor ter enviado uma mensagem privada para o autor do tópico.

[quote=Ataxexe][quote=samerjamal]Eu não queria discutir nada, apenas perguntei a quem abriu o tópico se ele fez os testes.

E não falo mais sobre o assunto, abraço a todos.[/quote]

Se não queria discutir nada, por quê postou em um forum de discussões? Teria sido até melhor ter enviado uma mensagem privada para o autor do tópico.[/quote]
Que eu saiba, não existe nenhuma regra obrigando a discutir os assuntos de maneira aprofundada.

E outra, até discutiria se fossem menos sabichões e arrogantes na maneira de tratar o assunto. Se ainda não entenderam isso, posso desenhar pra vocês.

REPITO: Que fossem menos arrogantes e falassem exatamente isso: atualmente ainda existem rejeições ao uso de ORM para mobile.

REPITO: Se acham que aqueles comentários são a maneira certa de se portar a um colega, bom para todos vocês, continuem assim.

REPITO: Se não tem com o que contribuir, não vomitem pelo teclado.