web-dev-qa-db-fra.com

Est-il judicieux d'utiliser ORM dans le développement Android?

Est-il judicieux d'utiliser un ORM dans le développement Android ou le cadre est-il optimisé pour un couplage plus étroit entre l'interface utilisateur et la couche DB?


Contexte : Je viens de commencer avec Android, et mon premier instinct (provenant d'un arrière-plan .net) était de chercher un petit mappeur relationnel objet et d'autres outils qui aident à réduire le clode passe-partout (par exemple POJO + OrmLite + Lombok ).

Cependant, lors du développement de ma première application jouet, je suis tombé sur une classe d'interface utilisateur qui nécessite explicitement un curseur de base de données: AlphabetIndexer . Cela m'a fait me demander si la bibliothèque Android Android ne convient pas pour un découplage strict de la couche UI et DB et que je manquerai beaucoup de fonctionnalités utiles et rapides si j'essaie de utilisez des POJO partout (au lieu d'un accès direct à la base de données).


Clarification : Je suis tout à fait conscient des avantages d'utiliser ORM en général, je suis particulièrement intéressé par la façon dont bien la bibliothèque de classes Android joue avec elle.

27
Heinzi

Android ne joue pas aussi bien avec d'autres frameworks qu'il le pourrait. Son style de développement recommandé suppose que vous construisez tout à partir de son API, sans autres bibliothèques. La couche d'interface utilisateur est très étroitement couplée au modèle. Ce style est idéal pour écrire des applications modulaires plus petites, pas pour des applications complexes.

Vous devez réfléchir à la question de savoir si vous souhaitez utiliser l'une des fonctionnalités d'Android; si vous n'en avez pas besoin, vous n'avez rien à perdre en utilisant un ORM. Si ce n'est pas le cas, vous devrez peut-être vous contenter d'un hybride. Utilisez un ORM pour tout ce que vous pouvez, mais donnez-vous des crochets aux Cursor et à tous les autres objets de bas niveau dont vous avez besoin. Si l'ORM que vous choisissez nécessite des DAO (je ne connais pas celui que vous avez mentionné), alors cette couche est probablement le meilleur endroit pour eux.

Alternativement, vous devrez peut-être utiliser aucun ORM externe du tout. Si vos besoins sont simples, vous pouvez écrire une simple couche d'accès aux données qui y répond. La plupart des exigences de base de données des applications ne sont pas bonnes. Si vous n'avez que quelques tables, écrivez simplement quelques classes d'accès et les objets du modèle et appelez-le bien.

YAGNI et KISS sont les mots-clés du succès ici. Je vous suggère de passer quelques jours à prototyper. N'ayez pas peur de jeter les applications de test simples. Essayez toutes vos idées seul, puis décidez si tout ou partie fonctionnera pour votre projet.

20
Michael K

Cela dépend de ce que vous faites avec votre modèle de données. Si vous disposez d'un code existant qui manipule un modèle orienté objet et si vous souhaitez conserver ces objets dans une base de données sqlite, vous avez besoin d'un orm.

Si vous écrivez du nouveau code Android à partir de zéro, j'éviterais un modèle de données en mémoire à moins que l'application n'effectue des manipulations OO vraiment complexes, comme un programme CAD pourrait, par exemple. Mais, pour la plupart des programmes, conservez le modèle de données dans la base de données et laissez la chaîne d'objets Cursor, Adapter et View faire beaucoup de travail pour vous.

6
Zigurd