Je suis un grand fan d'injection de dépendance et du cadre de jeu, mais j'ai du mal à voir comment les deux pouvaient être exploités ensemble.
Il y a des modules pour le printemps et la gosse, mais la façon dont les travaux de jeu le rend difficile Moi de voir comment DI pourrait être bénéfique au-delà des cas assez simples. P>
Un bon exemple de ceci est que le jeu s'attend à ce que JPA Travail soit effectué par des méthodes statiques associées à l'entité en question: P> < PRE> XXX PRE>
Donc, il n'y a pas besoin d'un évidemment, DI est bénéfique lorsqu'il existe des interfaces avec des systèmes externes, car la mise en œuvre concrète peut être moquée pour les tests, etc. , mais je ne vois pas beaucoup d'avantages pour une application de jeu autonome. P> Quelqu'un a-t-il de bons exemples? Est-ce que quelqu'un l'utilise pour injecter un PersonManager de code> à injecter dans des contrôleurs de la manière dont il pourrait être une application J2EE à ressort. Au lieu de cela, un contrôleur appelle juste
personne.delete (x) code>. P>
Classe code> -Style dans
contrôleur code> S afin qu'un certain nombre d'opérations puissent être effectuées dans la même transaction, par exemple? P> < / p>
6 Réponses :
Il montre à nouveau que vous ne devez utiliser que les dépendances injection si vous avez vraiment un avantage. Si vous avez des services complexes, il est utile, mais dans de nombreux cas, ce n'est pas le cas. Lisez le chapitre sur les modèles dans le Documentation de lecture . P>
Donc de vous donner un exemple où vous pouvez utiliser di avec jeu. Peut-être devez-vous faire un calcul complexe ou créer un PDF avec un moteur de rapport. Je pense que di peut être utile, spécialement pour les tests. Là, je pense que le module GUICICE et le module de printemps sont utiles et peuvent vous aider. P>
Niels p>
di n'est pas la solution ultime à utiliser partout ... N'utilisez pas de di juste parce que vous l'avez dans vos mains ... En jeu, vous n'avez pas besoin de DI pour développer des contrôleurs / modèles, etc. Mais Parfois, cela pourrait être un beau design: IMO, vous pouvez l'utiliser si vous avez un service avec une interface bien connue, mais vous souhaitez développer ce service à l'extérieur de la pièce et le tester à l'extérieur de la lecture et même tester votre projet de jeu avec juste un service factice. Afin de ne pas dépendre de la mise en œuvre du service complet. Par conséquent, DI peut être intéressant: vous branchez le service vaguement en jeu. En fait, c'est le cas d'utilisation d'origine pour DI Afaik ... P>
Ne pensez pas que j'allais utiliser di juste parce que je pouvais. J'essayais de voir comment i> di pourrait être utilisé en jeu. Il existe évidemment un besoin de DI sinon les modules de printemps et de guice n'auraient pas été écrits, mais comme je l'ai dit dans ma question initiale, la façon dont les travaux de jeu semble faire de l'utilisation de DI difficiles, et peut-être inutiles.
Je suis d'accord avec vous concernant DI en général ... C'est juste que je vois que beaucoup de gens ont tendance à utiliser di partout même si cela ne convient pas très bien. Vous savez que c'est toujours comme ça: nous découvrons quelque chose d'intelligent et nous voulons l'utiliser partout, mais ce n'est pas censé un cas particulier :) ... Hibernate était la même chose ... desservices aussi ... XML partout ... et maintenant Restez partout ... Json etc ... de toute façon, je pense que rien n'empêche d'utiliser la lecture + di: la lecture n'est tout simplement pas destinée à être énorme mais ni ni ...
Je crois de cette phrase que vous avez écrite: p>
"Est-ce que quelqu'un a de bons exemples? Quelqu'un l'utilise-t-il pour injecter une classe de style manager dans des contrôleurs afin qu'un certain nombre d'opérations puissent être effectuées dans la même transaction, par exemple?" P>
Avant de répondre à la question DI, je dois noter quelque chose: les transactions sont gérées automatiquement par la lecture. Si vous consultez le Documentation Modèle Vous verrez qu'une transaction est automatiquement créée. au début d'une demande et commis à la fin. Vous pouvez le renvoyer via JPA ou il sera roulé en arrière si une exception est soulevée. p>
Je le mentionne parce que du libellé de votre phrase, je ne suis pas sûr si vous en êtes au courant. P>
Maintenant, sur DI elle-même, dans mon expérience (non si étendue) avec DI, je l'ai vue principalement pour: p>
Bien sûr, il y a plus de scénarios, mais ceux-ci couvrent probablement la majeure partie de la réelle utilisation. Maintenant: p>
Il y a une autre question à considérer ici: je ne suis pas si sûr de Guice, mais le printemps n'est pas seulement DI, il fournit également de nombreuses fonctionnalités supplémentaires qui dépendent du module DI. Donc, peut-être que vous ne voulez pas utiliser di en jeu, mais vous souhaitez profiter des outils de printemps et utilisera DI, bien que indirectement (via une configuration XML). P>
Je viens d'écrire un message de blog sur la mise en place d'une application de cadre de jeu avec Google Guice. http://geeks.areotaly.in/dependency-njection -with-play-framework-and-google-guice p>
Je vois des avantages, en particulier lorsqu'un composant de votre application nécessite un comportement différent basé sur un certain contexte ou quelque chose comme ça. Mais je pense que les gens devraient être sélectifs sur ce qui se passe dans un contexte di. P>
Google dit que votre site Web contient un logiciel malveillant, dois-je reculer?
Le problème de mon humble avis sur l'approche d'initialisation statique de la pièce! est-ce que cela rend les tests plus difficiles. Une fois que vous abordez le problème de l'orientation de l'objet HTTP VS avec des membres statiques et des objets contenant les données de message HTTP (Demande et réponse), vous effectuez un métier de créer de nouvelles instances pour chaque demande en fonction de la possibilité de rendre vos objets suffisamment associés au reste. de vos classes de projet. P>
Un bon exemple de design différent est Servlets , il étend également une classe de base mais Il aborde le problème avec une création d'une seule instance (par défaut, car il existe des configurations qui permettent plus d'instances ). p>
Je pense que peut-être qu'un mélange des deux approches serait mieux, avoir un singleton de chaque contrôleur donnerait les mêmes caractéristiques d'une classe statique complète et permettrait une injection de dépendance de certaines types d'objet. Mais pas les objets avec la portée de la demande ou de la session, une fois que le contrôleur doit être créé chaque nouvelle demande. De plus, cela améliorerait la vérification de la vérification en inversant le contrôle de l'injection de dépendance, permettant ainsi des points d'injection arbitraires. P>
Les dépendances seraient injectées par le conteneur ou par un test, en utilisant probablement des simulacres pour les lourds lourds auraient déjà été testés auparavant. P>
À mon point de vue, ce modèle statique appuie le développeur à l'écart des contrôleurs de test car étendant FONCTIONALTEST Démarre le serveur d'applications, payant ainsi le prix des objets lourds tels que des référentiels, des services, des robots et des clients HTTP, etc. Je ne veux pas attendre beaucoup d'objets pour être bootsTrappé juste pour vérifier si un code a été exécuté sur le contrôleur, les tests doivent être rapides et clairs pour que les développeurs les aiment comme assistant de programmation / guide. P>
J'ai réfléchi à "mais pas aux objets avec la demande de demande ou de la session, une fois que le contrôleur devait être créé chaque nouvelle demande.", Comment cela pourrait-il être accompli? Cela pourrait être autorisé à travers certains objets pratiques qui seraient définis pour une demande donnée et ces objets transporteraient des données de demande / session, mais si ces objets sont définis dans des variables d'instance, il y a tout le problème de la concurrence et de la synchronisation, le paiement de ce prix diminuerait. le débit global en raison de la conflit. Serait-il préférable d'avoir une instance de contrôleur par utilisateur?
Au cours d'une année et quelques changements plus tard, Jouer 2.1 a maintenant EDIT: Voici Un autre exemple en utilisant Guice et Scala , si C'est votre poison. P>
Bonjour, j'ai édité le titre pour spécifier di Utilisez des cas i> - parce que cette question ne demande pas "comment utiliser di avec jeu", mais plutôt quand. Je cherche toujours le module de la façon dont Godice ne fonctionne pas encore pour moi.