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

27

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 le développement Android, et mon premier réflexe (issu d'un arrière-plan .net) a été de rechercher un petit mappeur relationnel-objet et d'autres outils qui aident à réduire le clode passe-partout (par exemple POJO + OrmLite + Lombok ).

Cependant, tout en développant ma première application jouet je suis tombé sur une classe d'interface utilisateur qui requiert explicitement un curseur de base de données: AlphabetIndexer. Cela m'a fait me demander si la bibliothèque Android n'est peut-être pas adaptée à un découplage strict de la couche UI et DB et que je manquerai beaucoup de fonctionnalités utiles et rapides si j'essaie d'utiliser des POJO partout (au lieu d'un accès direct à la base de données ).


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

Heinzi
la source

Réponses:

20

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 à Cursors et à tout autre objet 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 excellentes. 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.

Michael K
la source
6

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 pourrait le faire un programme de CAO, 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.

Zigurd
la source