18

à quoi ressemble une bonne architecture pour une application Android? Est-ce que toute la «logique métier/métier» a été effectuée dans un service d'arrière-plan et que l'activité communique uniquement avec le service pour interroger/extraire des données de quelque part (local/distant)? Voulez-vous implémenter le "service" que l'activité appelle comme un véritable service Android? Ou un POJO-Singleton qui fait le travail (peut-être en utilisant des threads de fond). Vous pouvez également instancier des threads d'arrière-plan dans votre activité pour des actions fastidieuses (interroger un service Web).Android Architecture Design - Comment le faire correctement?

Comment abstraites-tu l'accès à tes données dans le bon sens? Utiliseriez-vous un fournisseur de contenu pour accéder/résumer vos données? Comment/D'où devrait-il être interrogé? Activité? Un service? ..? J'ai essayé de chercher une bonne conception d'architecture d'application, mais j'ai seulement trouvé comment l'architecture d'Android ressemble, pas comment une application d'Android devrait ressembler.

Alors, quelle est votre opinion à ce sujet? Quels composants d'une application Android doivent communiquer entre eux pour assurer la meilleure extensibilité/encapsulation, ...?

Répondre

15

Il n'y a pas une seule réponse à cette question. Le bon design OO n'est pas spécifique à Android. Je dirais que la règle est - si le cadre vous donne un objet de haut niveau (tel que Service dans le cas d'Android) qui correspond à votre cas d'utilisation, utilisez-le. Si vous vous trouvez à faire des implémentations POJO des mêmes choses que vous obtenez gratuitement avec le framework, allez avec le framework.

En ce qui concerne la séparation des préoccupations, il s'agit d'une tâche OO standard. Ne mettez rien dans vos classes d'activités qui ne soit pas le travail de l'activité. Surdoser l'activité avec des méthodes et des propriétés dont l'activité a besoin mais qui ne sont pas vraiment le travail de l'activité est mauvaise - rend l'intention de votre activité difficile à comprendre.

Habituellement, je sépare des choses en sous-paquets dans mes applications.

  • com.myname.myproject.app - classes de base, la fonctionnalité de l'application globale
  • com.myname.myproject.net - stuff réseau, utils liés au réseau
  • com.myname.myproject.data - aides db , fournisseurs, etc
  • com.myname.myproject.model - modèle objet

etc.

en ce qui concerne la communication w dans votre application ...

J'ai toujours une classe Application personnalisée que j'inscris dans le manifeste. De cette façon, quand j'ai des contrôleurs et des assistants qui ont besoin d'être une "instance unique", je n'ai pas à faire tout ce truc de threads sûrs de singleton ... Je garde juste une copie globale de.

RoboGuice est un cadre d'injection de dépendance qui rend encore plus facile à réaliser ... il vaut vraiment la peine d'y jeter un coup d'œil. Si cela vous intéresse, le groupe Google pour RoboGuice est génial et est constamment rempli avec les créateurs du framework qui peuvent répondre à tout ce dont vous avez besoin.

En ce qui concerne en application la communication, j'utilise mes classes de contrôleur d'instance unique et de l'Etat pour maintenir l'état et accomplir des tâches courantes, et je l'habitude d'utiliser BroadcastIntents pour communiquer avec les activités Services

+0

une raison particulière pour laquelle vous utilisez BroadcastIntents pour communiquer à des activités à partir des services et non des gestionnaires? – KL4711

+2

Pas particulièrement. Mes activités peuvent annuler l'enregistrement de leurs récepteurs d'intention de diffusion dans onPause, afin que mon service puisse diffuser l'information et que seule l'activité active la reçoive si elle a enregistré un récepteur. J'aime la nature déconnectée de cela. Si Handler peut accomplir la même chose sans garder une référence à l'activité dans le Service, alors je ne suis tout simplement pas au courant. – Rich

+0

@Rich: Depuis un moment, vous avez répondu à cela! Avez-vous trouvé des ressources en ligne qui expliquent cette architecture en détail au cours de cette période? –