Ce qu'il faut utiliser? MVC, MVP ou MVVM ou...?

je vais lancer un projet Java pour développer une application bureautique. Ce qu'il faut utiliser comme motif de la couche de présentation (MVC, MVP,MVVM or....)?

...si c'est possible, avec quelques petits exemple... : -)

36
demandé sur Majid 2010-01-21 00:29:47

4 réponses

en fait, le post ultime que vous recherchez est cette réponsecette réponse à partir de Karsten Lentzsch (de JGoodies de la gloire) dans le Swing de Cadres et de Meilleures PratiquesSwing de Cadres et de Meilleures Pratiques thread.

Bonjour,

j'écris des applications Swing depuis plusieurs années que beaucoup de gens trouvent élégant. Et j'apprends à l' les développeurs de travailler avec Swing efficacement: comment pour structurer et assembler des applications, comment lier et valider la date, ainsi que la façon de trouver, la conception, la mise en page et mettre en œuvre bien conçu les écrans dans les Swing.

je dirais qu'il n'y a pas de" meilleures pratiques " pour le Swing disponibles en ligne. Et Je doute que n'importe qui puisse fournir des" meilleures " pratiques, parce que cela nécessitent des discussions entre les développeurs Swing et les fournisseurs de solutions sur les approches, ce qui fonctionne bien techniquement et ce qui est facile à comprendre et travailler avec. De plus, les pratiques exemplaires expliqueraient qui peut obtenir quel résultat qualité, et ils décriraient la production temps et coûts de production; mais je n'ai jamais pu trouver ces informations en ligne ou dans un Swing livre.

À mon avis, l'absence de bonnes pratiques et d'informations comment construire une application Swing est le plus grand obstacle que les développeurs rencontrent en commençant par Swing. La plupart des développeurs avec qui j'ai travaillé ont été lents à trouver le design, mise en œuvre des dispositions, panneaux de construction, données de reliure, traitement des événements, et l'organisation des différentes parties de code et couches de code. Et beaucoup de Swing applications que j'ai vu sucer; en plus de leur mauvaise conception visuelle, ils sont difficile de comprendre et même de petits changements coûte beaucoup. Généralement les développeurs ne savaient pas où mettre quel code?, comment séparer préoccupations?, comment lier les choses ensemble?, comment travailler avec des Actions?, comment pour lancer une application? et comment stocker et restaurer l'état d'UI? La plupart des promoteurs manque de directives à suivre.

mais j'ai trouvé que le développeur moyen peut bien fonctionner avec Swing, si pris par la main dans environ 3 à 10 jours. La quasi totalité de votre les questions peuvent être répondues ou adressées par code, bibliothèques, architecture d'application, modèles, pratiques générales de programmation, exemples bien conçus, tutoriels, etc. J'enseigne le développement D'un Swing processus qui est construit autour d'une architecture à trois niveaux domaine, outil et présentation couches et qui est basé sur un productifs système de mise en page. Même si la plupart des pièces sont faites par programmation les développeurs obtiennent des résultats rapidement et à la fois le code et la conception visuelle devient tout à fait cohérente. Cela peut accroître la productivité d'un développeur. lot - dans la mesure où le travail de Swing prend une fraction du travail de projet.

Alors, que pouvez-vous faire? Je recommande vivement D'étudier Martin Fowler projet pour D'autres "modèles d'application de L'entreprise Architecture." J'ai trouvé que ces modèles fonctionnent vraiment bien avec Swing et Swing équipes - même pour les développeurs qui sont nouveaux à Swing et le Swing architecture. Je choisirais d'abord les modèles suivants: "présentation Modèle", "Domaine Séparés par des", et "d'une Présentation Séparée". Personnellement, je favoriser le modèle de présentation (modèle D'Application pour les petits détaillants), sur le modèle MVP (Model-View-Presenter pattern). Cependant, le MVP est un vrai et bien étudié alternative.

Fowler les modèles peuvent être combinés avec une architecture à trois niveaux client cela Balance bien pour des applications de Swing modérément grandes. Il se compose d'une couche domaine, d'une couche présentation et d'une couche modèle médiatrice. J'ai décrit cette architecture dans ma liaison de données présentation. Les applications MVP peuvent également être structurées dans ces 3 niveaux client.

une tâche clé pour les applications Swing est la liaison de données: comment se connecter les objets de domaine et les propriétés des objets de domaine des composants Swing. Fondamentalement, vous pouvez copier vos données d'avant en arrière, ou construire des chaînes de adaptateurs de vos objets de domaine aux composants de L'interface utilisateur. Copie l'approche est facile à comprendre et souvent le premier choix pour ceux qui sont nouveaux à Swing ou data binding; je dirais que c'est un bon choix. D'un autre côté, copier rend la synchronisation des vues beaucoup plus difficile. Chaînes d'adaptateurs et mises à jour automatiques ou semi-automatiques peuvent réduire considérablement la quantité de code nécessaire pour lier les données du domaine à l'INTERFACE utilisateur. L'inconvénient est que cette approche est beaucoup plus difficile à comprendre. Comme vous l'avez souligné, le Swing ne fournit aucune grande abstraction pour une réutilisables et modèle flexible qui peut être utilisé pour lier le texte champs; l'interface de Document n'est pas appropriée pour les données génériques accès. Il y a quelques bibliothèques disponibles qui fournissent un modèle de valeur l'interface qui est uniquement destiné à ajouter un générique, puissant, et modèle flexible pour les données à valeur unique: chaînes, booléens, nombres, dates, etc.

Je ne suis pas au courant d'un livre tournant qui explique une application de vrai Swing processus de développement. Idéalement, un tel livre combinerait les modèles, l'architecture et les techniques de liaison des données mentionnées ci-dessus et décrivez comment le mettre en œuvre dans Swing. De toute façon, il y a 10 ans documentation pour un processus de développement de demande Smalltalk c'est juste que. L'architecture et la documentation JClient d'Oracle ne sont pas cela complet mais peut être plus facile à lire pour les développeurs Java. Je fournir une présentation sur la liaison de données qui est sur l'Oiseleur de modèles, un Une architecture à trois niveaux et une mise en œuvre une liaison automatique de données. Les sources tutorielles de ma bibliothèque de reliure peut vous aider à vous familiariser avec les chaînes d'adaptateur et le modèle ValueModel interface. La meilleure documentation pour le modèle MVP peut être trouvée dans Le Dauphin Smalltalk docs.

une fois que vous avez choisi votre architecture et l'ensemble de motif de bureau, vous devrait aborder les tâches de base suivantes: 1) améliorer les apparence en choisissant un ensemble de look professionnel et se sent approprié pour votre ensemble de plate-forme cible, 2) Choisissez un système de mise en page qui vous aide créez rapidement des écrans cohérents et bien conçus, 3) Choisissez une donnée solution de validation, et 4) Prenez un sac de solutions pour Swing quotidien tâche.

il y a quelques projets qui dessinent une architecture de transition, aborder les tâches de liaison des données et les tâches typiques de transition, par exemple: solaire JDNC, Jclient/ADF D'Oracle, le Spring RCP, la plate-forme NetBeans. Je fournir une suite commerciale de solutions Swing qui est basée sur le open source JGoodies bibliothèques et ajoute un sac de solutions et de sources pour tous les outils et démos de JGoodies publics. Ces sources sont destinés à expliquer comment lier toutes les questions mentionnées ci-dessus.

Permettez-moi d'ajouter mon avertissement standard sur les cadres dits "MVC". Swing n'utilise pas MVC, il utilise un modifié modèle. MVC est souvent mal cité et mal compris - surtout dans le contexte du Swing. En outre, MVC est bon pour les composantes D'UI, pas pour les applications. Donc Je recommander de rechercher des concepts, des solutions et des bibliothèques qui reflètent et travaillez avec l'architecture Swing, pas MVC.

la communauté des inventeurs du modèle MVC a introduit le Modèle d'application (maintenant connu sous le nom de modèle de présentation) vers 1993; MVP suivie un peu plus tard. À mon avis, ces deux modèles sont beaucoup plus utile pour Swing que MVC. Récemment, l'environnement qui a apporté Modèle de présentation à un public plus large est passé à une nouvelle architecture: "Pollock". Les lecteurs intéressés peuvent google pour voir comment que diffère des chaînes d'adaptateurs qui sont souvent combinés avec Modèles De Présentation.

Dernier point mais non le moins, une déclaration personnelle. Je peux travailler beaucoup mieux avec Swing qu'avec d'autres toolkits ou cadres que j'ai utilisés avant; je peux faire plus avec moins de code, la le code est mieux structuré, il est plus facile de maintenir, et j'obtiens des résultats rapidement.

J'espère que cela vous aidera. Meilleures salutations, Karsten Lentzsch

Références: Fowler autres modèles - http://martinfowler.com/eaaDev http://www.jgoodies.com/articles/ Processus de développement d'applications Smalltalk - http://www.cincom.com/downloads/pdf/AppDevGuide.pdf modèle MVP documentation - http://www.object-arts.com/EducationCentre/Patterns/MVP.htm du Soleil JDNC project home - http://jdnc.dev.java.net/ FAQ sur les ADF D'Oracle - http://www.oracle.com/technology/products/jdev/htdocs/905/adffaq_otn.html Printemps RCP d'accueil du projet - http://www.springframework.org/spring-rcp.html plate-forme NetBeans accueil - http://www.netbeans.org/products/platform/ JGoodies Swing Suite - http://www.jgoodies.com/products/index.html

si vous ne connaissez pas Karsten et JGoodies, alors croyez-moi, ce gars sait vraiment de quoi il parle. Je recommande vivement de lire attentivement sa réponse!--5-->et le matériel qu'il a publié comme référence. Plus précisément, assurez-vous de vérifier son Bureau de Motifs et de Liaison de Données présentation. Étonnamment, je préfère le ancienne versionnouveau .

Permettez-moi de citer sa diapositive sur MVC vs MVP:

  • Oui, Swing utilise un étendu forme de MVC interne
  • Mais MVC pour les composants, MVP est pour des applications

Et puis, à partir du Résumé:

Mais je ne peux pas faire mieux que Karsten à expliquer cela, je peux au mieux le paraphraser. Lisez simplement de lui!

peut-être aussi jeter un oeil à Desktop Java démos pour l'apprentissage (plus précisémentréponse).

50
répondu Pascal Thivent 2017-12-05 16:21:45

voici un article qui compare trois modèles GUI en Java utilisés pour implémenter le même écran trois fois:

Implementing event-driven GUI patterns using the ZK Java AJAX framework, Simon Massey, Sachin K Mahajan

depuis différents cadres et les langues ont de légères variations sur ce que les gens sentent est MVP, MVC, MVVM et MVVMP etc l'article est prudent de se référer aux modèles par les noms longs donnés par Martin Fowler pas le court part M__ monikers qui sont faciles à argumenter.

il est clair que ZK est un environnement de programmation semblable à celui d'un ordinateur de bureau web ou mobile, mais les modèles sont également applicables à Swing ou à un autre gros client. Cependant, en l'absence d'un bon cadre de reliure de données pour un environnement de bureau donné, il n'est pas très possible de tenter la MVVM. C'est pourquoi, dans cette première présentation, le modèle de "modèle de présentation" se voit attribuer le nom "MVB" pour Model-View-Binder comme alternative à l'appellation "MVVM".":

Modèles de Conception dans ZK: Java MVVM comme Modèle-Vue-Classeur, Simon Massey

3
répondu simbo1905 2014-07-20 11:22:10

Vous pouvez prendre un coup d'oeil à . ZK prend en charge à la fois MVP et MVVM, et cet article pourrait fournir quelques idées pour votre choix -- le modèle de programmation est similaire à Swing, pensé qu'il s'agit d'un cadre Web.

1
répondu Tom Yeh 2011-12-09 03:36:31

je voudrais également vous recommandons d'utiliser Google pour trouver plus d'informations depuis votre question est vraiment vague. Quoi qu'il en soit, puisque vous voulez faire votre application de bureau en Java, et vous allez probablement utiliser Swing, je veux juste souligner que Swing est conçu avec un modèle MVC à l'esprit. De toute façon, vous pouvez facilement le modifier en MVP en utilisant des interfaces supplémentaires.

si vous n'êtes pas certain du modèle, je vous recommande D'utiliser le MVC. Vous trouverez beaucoup plus d'exemples.

Mon 2 cent.

0
répondu Carlos Tasada 2010-01-20 21:58:37