Question

Je suis en train de lire sur DDD et je pense que je peux être recours à des services mal ou du moins d'une manière pas idéale. Mes classes de service ont tendance à avoir un bon nombre de variables d'instance contenant des références du référentiel et ils semblent faire beaucoup de travail (i.e. ont beaucoup de méthodes).

Est-il souhaitable de créer des services plus ciblés? Comme une méthode par service qui effectue une logique spécifique? De plus, si les classes de service stocker les variables d'instance à d'autres entités? J'ai lu quelque chose au sujet des services sans état d'être, je ne sais pas si je brise cette règle en ayant ces variables d'instance.

Merci!

Était-ce utile?

La solution

  

Mes classes de service ont tendance à avoir tout à fait   quelques variables d'instance ...

Ce n'est pas nécessairement une odeur de code. Si votre service nécessite de nombreuses dépendances pour terminer ses travaux, alors c'est tout simplement un fait.

  

... ils semblent faire beaucoup de travail (i.e.   ont beaucoup de méthodes).

     

Est-il conseillé de créer des services plus ciblés?

En règle générale, plus granulaire vous pouvez faire vos interfaces de service (à savoir les moins méthodes), mieux (jamais dû au chalut à travers une interface avec une cinquantaine de méthodes sur elle à la recherche de celui que vous voulez appeler? ). Mais à moins que vous publiez comme une API publique, la granularité de vos interfaces de services peuvent être raffiné que vous avancez. Souvent, lors du démarrage d'un projet, je vais commencer par un seul service et le diviser au fil du temps. Si vous êtes le consommateur de ces services, lorsque vous commencez à ressentir la douleur d'une interface obtenir à grande, vous saurez qu'il est temps de le casser. Bien sûr, si cela une API publique, alors vous devrez faire beaucoup design plus avant vers le haut.

  

En outre, si les classes de service stocker les variables d'instance à d'autres entités? J'ai lu quelque chose au sujet des services sans état d'être, je ne sais pas si je brise cette règle en ayant ces variables d'instance.

Stockage des dépendances comme variables d'instance ne signifie pas nécessairement que votre service n'est pas apatride, tant que les variables d'instance sont également sans état. Pour être sans état Considered appels de méthode sur un service ne doivent en aucune façon dépendent des méthodes précédentes ayant appelé. Vous devriez être en mesure de charger une instance unique de service, et l'ont partagé pour votre application (par exemple une instance d'un service sans état ne doit pas être spécifique à la session d'un utilisateur particulier). En d'autres termes, votre service ne devrait pas conserver tout état entre les appels de méthode. Le stockage d'une dépendance sans état référentiel comme une variable sur une instance de service ne viole pas cette exigence.

Les services de la raison est un objectif souhaitable, est d'avoir aucun état réduit considérablement la possibilité de bugs. Il simplifie le test d'une méthode de service en limitant les cas-tests à faire varier les paramètres transmis, plutôt que d'avoir à se soucier de l'état précédent du service. Il peut également offrir des avantages de performance.

Autres conseils

Je recommande la lecture sur l'injection de dépendance, l'inversion de contrôle et autres.

Voici l'article de Fowler: http://martinfowler.com/articles/injection.html , bien que je l'ai toujours trouvé d'être un peu plus haut. Je voudrais essayer marche à travers un tutoriel qui représente l'aide d'un conteneur DI / IoC.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top