2009-09-17 9 views
2

Si j'ai besoin de deux modes dans mon application, quel motif de conception vais-je utiliser afin que je puisse éviter le code conditionnel laid? App est actuellement MVC, mais je ne veux pas de code conditionnel dans mes contrôleurs et je ne veux pas deux contrôleurs pour chaque vue sauf si je dois le faire.Quel motif de conception? J'ai besoin de deux modes dans mon application, éditer et afficher

Des suggestions?

+0

Pouvez-vous expliquer ce que vous entendez par "deux modes"? –

+1

Vous ne voulez pas de code conditionnel dans vos contrôleurs? Où allez-vous le mettre? Le code conditionnel fait partie de votre vie, s'habituer à l'améliorer, ne pas l'éviter :) – JoshJordan

+0

Plus de détails, s'il vous plaît! – TrueWill

Répondre

4

Une sous-classe différente pour chaque implémentation, avec des fonctionnalités partagées dans une superclasse commune ou en utilisant le Template Method pattern.

1

Abstract Factory ou Proxy. Votre contrôleur contiendrait une sorte d'instance Factory ou Proxy qui est utilisée pour récupérer un "mode" et agir en conséquence.

0

jetez un oeil à JSR-168, le portlet java et son implémentation de référence, il devrait être similaire à ce que vous essayez d'atteindre.

0

L'endroit approprié pour une telle décision est le contrôleur de MVC. Je vous recommande de l'écrire d'abord. Si c'est vraiment répétitif, il peut être simple de comprendre comment le nettoyer: vous pouvez déplacer la logique conditionnelle dans une classe de base, ou selon la langue, peut être capable de gérer avec une sorte de filtre. Vous pouvez également créer une "usine" pour les vues, qui comprend le "mode" de votre application. Architecturalement, cependant, tout cela est dans le contrôleur.

Vous avez raison de ne pas le vouloir dans la vue. Ce serait assez désordonné. Vous voulez probablement deux versions des vues, une pour «voir» et une pour «éditer».

En fin de compte, c'est ce à quoi servent les contrôleurs. Bonne chance!

0

Dans CafeTownsend démo faite avec PureMVC il ya une situation similaire où il y a deux vues différentes et deux médiateurs distincts. Vous n'avez absolument pas besoin de code conditionnel pour cela. Je ne sais pas quelle technologie et quel langage de programmation vous utilisez, mais dans Flex ce sera un ViewStack avec ListView et EditView comme enfants:

Le médiateur correspondant est enregistré à la demande lorsque la vue est créée. Vous pouvez vérifier d'autres implémentations en utilisant le lien précédent.