J'étais un développeur JaveEE. Récemment, j'ai rejoint une équipe de développement Android. La structure d'Android m'a confondu. Le modèle de conception MVC semble ne pas convenir au développement Android. Alors, quel est le principe du modèle de conception pour le développement Android? Je veux dire, y a-t-il une indication sur la façon d'écrire un code Android propre, facile à lire et efficace?
Réponses
Trop de publicités?Android architecture m'a ennuyé au début, mais je commence à voir une méthode pour leur folie. C'est mal expliqué par l'androïde de la documentation. Mon plus gros reproche a toujours été que c'est dur d'avoir un modèle de données centralisée avec des objets que vos Activités se partagent seulement comme une application normale. Android semblait vouloir me être un nomade parce que je ne pouvais partager des primitives entre mes Activités. Et l'abandon de déchets dans une base de données n'est PAS un modèle, car il ne contient pas de comportement. Alors que la plupart des gens de mon entreprise logique, toutes les extrémités vers le haut dans mon activité, rendant difficile de partager une logique d'entreprise dans d'autres activités.
Je viens de découvrir qu'il me manquait certaines des principales pièces du puzzle. Android est MVC. Cependant, il est couplé à la Vue assez fortement.
- Activité == Contrôleur
- Modèle == sous-classe de l'Application
- Rien que les sous-classes de la Vue == View
Il est intéressant de noter que vous pouvez créer une sous-classe de la Demande et de le déclarer dans votre fichier de Manifeste, et Android va créer une instance unique de cet objet qui vit la longueur de votre demande de n'importe quelle Activité est détruite ou créé. Cela signifie que vous pouvez construire un modèle de données centralisée là que toutes les Activités ont accès.
La façon dont je le vois, c'est quelque chose comme une primitive de Printemps conteneur que vous pouvez initialiser des objets et résoudre des dépendances entre eux. De cette façon, vous pouvez dissocier le modèle part de votre demande à l'écart de l'Activité eux-mêmes. Et juste à l'Activité, faire des appels sur le modèle, et de la main rappels de recevoir les résultats de sorte qu'il peut mettre à jour l'INTERFACE utilisateur.
Les problèmes avec Android c'est qu'il mélange contrôleur et vue assez fortement. Par exemple, les sous-classes comme TabActivity, ListActivity implique un certain point de vue utilisé. Afin d'échanger un point de vue est assez impliqué. Aussi le Contrôleur rend très spécifique des hypothèses sur ce que la vue est la même si vous utilisez de l'Activité. Il contient des références directes à des objets d'INTERFACE utilisateur comme TextView, etc. Et il enregistre pour le faible niveau des événements, comme les clics, clavier, etc.
Il serait mieux si l'Activité peut s'inscrire à plusieurs des événements de haut niveau comme "Login", "mettre à Jour le Solde du Compte", etc, qui à la vue de l'expédition en réponse à une série de clics, clavier, appuyez sur les événements. De cette façon, le contrôleur fonctionne au niveau que vous pourriez décrire des fonctionnalités au lieu des caractéristiques de conception.
Je pense que nous allons atteindre ce type de conception par la suite car nous comprenons mieux venir avec de meilleurs outils et de techniques. Il semble que Android peut avoir l'extensibilité pour ce faire, mais c'est à la communauté de le cartographier.
Les actions, les vues et les activités dans Android sont cuites dans la façon de travailler avec l'INTERFACE utilisateur Android et sont une mise en œuvre d'un modèle-vue-vuemodèle modèle, qui est structurellement similaire (dans la même famille que le modèle-vue-contrôleur.
Au meilleur de ma knoweledge, il n'y a pas de moyen de sortir de ce modèle. Il peut probablement être fait, mais vous auriez probablement à perdre tous les avantages que le modèle a, et réécrire votre propre couche d'INTERFACE utilisateur pour le faire fonctionner.
Vous pouvez trouver MVC dans les points suivants:
- Vous définissez votre interface utilisateur dans les différents fichiers XML par la résolution/matériel etc.
- Vous définissez vos ressources dans divers fichiers XML par les paramètres régionaux etc.
- Stocker des données SQLite ou vos données personnalisées dans /actif/ dossier, en savoir plus sur les ressources et les actifs
- Vous étendez clases comme ListActivity, TabActivity et rendre l'utilisation du fichier XML par inflaters
- Vous pouvez créer autant de catégories que vous le souhaitez pour votre modèle, et avoir vos propres packages, qui va agir comme une structure
- Beaucoup d' Utils ont été déjà écrit pour vous. DatabaseUtils, Html,
Il n'y a pas un seul Modèle MVC vous pourriez obéir. MVC seulement des états plus ou moins que vous ne devrait pas se mêler de données et de la vue, de sorte que, par exemple, les vues sont responsables de la tenue des données ou des catégories de traitement de données sont directement affecter la vue.
Mais néanmoins, la manière Android traite avec des classes et des ressources, vous êtes parfois même obligés de suivre le modèle MVC. De plus compliqué dans mon oppinion sont les activités qui sont responsables, parfois, pour la vue, mais tout de même agir comme un contrôleur dans le même temps.
Si vous définissez votre point de vue et mises en page dans les fichiers xml, de charger vos ressources à partir du dossier res, et si vous évitez de le plus ou moins de se mêler ces choses dans votre code, alors votre de toute façon à la suite d'un patron de conception MVC.
Le développement Android est principalement un développement d'interface graphique, qui, à l'instar de Swing / AWT en Java, consiste en un grand nombre de classes internes anonymes réagissant aux événements de l'interface graphique. C’est l’une des choses qui m’a vraiment empêché de faire beaucoup avec Swing .... mais j’ai un téléphone Android, je vais donc serrer les dents et en finir, comme beaucoup de fans d’Apple l’ont dit sur les problèmes d'antenne. ;)
Android fait typique de la décision de rendre le Contrôleur et la Vue d'une seule classe. Cela les encourage à mettre trop au même endroit. Une Activité correspond à un écran, chaque point de Vue d'une région, d'un écran (parfois la totalité de l'écran), chaque Contrôleur de l'utilisateur gestes de cette région de l'écran, et les Modèles sont seulement les Modèles, parfois soutenues par des services de l'Environnement ou de quelques autres un peu fou ensemble de fonctions utilitaires. J'utilise l'Activité de coordonner un ou plusieurs MVC trios. Cela permet de traiter avec Android choix de simplement jeter le tout à la même place.
Je peux tester la grande majorité d'une application Android sans courir le simulateur. Gagner gros.
Mon impression est que android modèle de programmation a beaucoup de similitude avec MS WPF. XML disposition des définitions, le code qui est toujours lié à l'une de ces définitions... Donc, si vous vous posez des questions à propos des modèles de conception parce que vous voulez améliorer votre actuelle ou en cours de développement android des projets, peut-être que vous devriez regarder WPF les pratiques et les modèles pour l'amélioration de l'architecture, comme MVVM.
Consultez ces liens:
http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
il y a un petit projet qui est déjà en essayant chose de similaire:
http://code.google.com/p/android-binding/
cheers