2010-11-19 11 views
1

Dans le projet sur lequel je travaille, nous venons juste d'utiliser Flex 4. Nous n'utilisons pas de framework particulier et la gestion requiert une architecture de vue/séparation complète. Le principe de base consiste à associer chaque fois une classe ActionScript en tant que modèle à la vue .mxml.Flex4 - Architecture de codage, séparation vue/modèle

J'ai du mal à comprendre comment lier les deux: qui fait référence à qui, et dans quelle mesure puis-je éliminer la partie script à mon avis.

J'apprécierais vraiment tout aperçu sur celui-ci.

Merci

Répondre

1

Vous avez également la possibilité d'utiliser le modèle "Modèle de présentation", qui est très similaire à MVVM dans le monde Silverlight. La différence est que dans Flex, il est très facile où Silverlight nécessite une tonne de plomberie.

L'architecture va comme ceci:

  • La vue est une vue. Tous déclarative ... très peu de code impératif
  • Le modèle de présentation (PM) contient le comportement de l'interface utilisateur et de la colle au modèle
  • Le modèle contient les données, les services et les règles d'affaires côté client

The View référence le PM et utilise la liaison de données aux propriétés dans le MP. Le MP enveloppe le modèle et ajoute la validation au niveau de l'interface utilisateur, le comportement au niveau de l'interface utilisateur et les données de formats.

"Modèles de présentation Séparées" comme PM, MVC et MVP sont très importants pour les "capacités" suivantes:

  • Unité testabilité
  • DesignAbility
  • maintenabilité
  • Migratability (Navigateur pour Air à dispositif...etc)
+0

Merci, il semble que cette solution ressemble étroitement à l'architecture que nous mettons en place. Si je comprends bien, j'ai besoin d'avoir un attribut du modèle qui mappe chaque contrôle dans la vue et affecte directement les changements sur ces contrôles aux attributs? – Sandy

+0

Autre question: dans le modèle PM, une fois que vous commencez à avoir d'autres composants enfants personnalisés ayant leurs propres modèles, comment gérez-vous la communication entre eux sans contrôleur? – Sandy

+0

Donc si je comprends bien votre question, je fais souvent du modèle une propriété publique du PM afin que je puisse lier directement aux accessoires dans le modèle quand il n'y a pas besoin de s'adapter à la vue. Pour les choses qui doivent s'adapter à la vue, je crée des getters personnalisés pour faire l'adaptation. En ce qui concerne la communication entre les MP, vous pouvez utiliser un modèle commun ... ou vous pouvez utiliser un bus d'événement de quelque sorte. J'utilise un conteneur léger Inversion of Control pour injecter le bus de modèle et d'événement dans mes MPs. –

1

Habituellement, les modèles sont supposés ne contenir pratiquement aucune logique. Les vues contiennent la logique permettant d'afficher les données fournies par les modèles. Comme une telle vue accède aux modèles, et non l'inverse. Cela permet également de définir plusieurs vues différentes pour le même ensemble de données.

Dans Flex, les fournisseurs de liaison de données et de contenu sont à la fois un bon moyen d'intégrer des données dans la structure MXML. En particulier la liaison de données vous permet d'utiliser le contenu sans trop y penser; et surtout sans définir vous-même toutes les références (vous n'avez donc pas besoin de les écrire en code).

Pour éliminer le reste de la logique de la vue, vous utilisez généralement des contrôleurs dans l'architecture MVC. Les contrôleurs sont un "intermédiaire" entre les vues et les modèles et sont supposés traiter les données. Donc toute la logique utilisée par votre application est supposée être là. De cette façon, vous avez une stricte séparation des modèles (qui ne contiennent que les données pures), des vues (qui n'affichent que des données) et des contrôleurs (qui les rapproche tous et ajoute la logique de l'application). Voir le Wikipedia article pour plus d'informations sur ce sujet.

Et pour finir, il existe des frameworks qui facilitent la gestion de MVC. Le plus connu pour ActionScript est probablement RobotLegs.

+0

Cela ne devrait-il pas être le contraire pour le contenu sur la logique? Je veux dire que le modèle ne devrait pas définir comment la vue s'affiche? – Sandy

+0

@Sandy: Non. Le modèle doit être agnostique. Il ne devrait pas vraiment savoir qu'une opinion existe. Si vous avez des concepts de vue dans votre modèle, vous vous trompez probablement. C'est ce que le "Controller" dans MVC, "Presenter" dans MVP ou "Presentation Model" sont pour ... savoir qu'une vue existe et faciliter l'affichage/modification des données du modèle avec/depuis la vue. –