2009-06-15 3 views
1

J'apporte une certaine logique à mon application web pour rechercher des coordonnées géographiques pour un utilisateur, les stocker, puis utiliser ces coordonnées pour rechercher le fuseau horaire et le stocker. Mon premier essai a été d'ajouter une méthode GeoCodeUser() à un MappingService que j'avais défini pour faire d'autres tâches liées à la map. Parce que la recherche des deux bits de données reposait sur deux services REST différents, j'ai divisé les deux tâches de recherche en AddressGeoCoder et TimeZoneCoder et utilisé ceux-ci pour récupérer les données et UserRepository pour les stocker. La partie impaire de cette solution est que, bien que cette méthode ait besoin d'accéder au référentiel et à deux 'codeurs', les autres méthodes de la classe ne l'ont pas fait. Donc, chaque fois que j'utilise ce service pour faire d'autres choses, je reçois des dépendances dont je n'ai pas besoin, puis je les laisse tomber. Voici donc ce que je me demande:Basé sur les pratiques DDD, où cette logique devrait-elle aller et comment puis-je éviter les dépendances inutiles?

  • Si cela dans un service (car il est la coordination des différentes opérations) ou possible dans l'objet modèle « utilisateur » lui-même?

  • Si oui, devrais-je définir un service basé sur ses dépendances & zone d'intérêt (par exemple UserGeoCodingService), ou juste zone d'intérêt (MappingService) avec des dépendances supplémentaires?

Merci beaucoup pour votre perspicacité!

James

Répondre

1

à mon humble avis, DDD est tout au sujet du modèle, et d'exprimer comment les experts du domaine disent que les choses fonctionnent. Je ne connais pas vraiment grand chose de ce domaine, donc je ne peux pas préciser avec certitude ce qui est le plus logique. Vous aurez besoin d'un expert ou d'un modèle cohérent sur lequel vous baser. Si vous n'avez pas encore de modèle, arrêtez le codage maintenant et allez construire votre modèle. D'abord, vous avez besoin d'un langage omniprésent pour vous aider à mieux comprendre, en créant les classes en conséquence. La séparation basée sur le domaine d'intérêt n'a-t-elle plus de sens pour les experts du domaine?

Comment les experts du domaine expliquent-ils le processus? Utilisent-ils des termes comme AddressGeoCoder, TimeZoneCoder? Si oui, alors c'est un bon design. Sinon, vous feriez mieux de savoir comment ils pensent. A propos de la classe, qui n'a qu'une seule méthode qui utilise un référentiel et deux codeurs, il y a quelques idées possibles (voir ou en créer une qui a du sens POUR LE DOMAINE).

  • Seule la méthode receive ses dépendances à partir des paramètres
  • Extrait cette méthode pour une autre classe (comme un service, comme vous l'avez dit)
  • Résumer ces 3 entités dans un seul (comme GeoCodeUserData, encore une fois, si cela est logique pour le domaine)
  • Utilisez un cadre d'injection de dépendance pour éviter un surcroît de travail, y compris ces dépendances
  • Laissez votre constructeur accepter les valeurs NULL (et traiter les erreurs de la même façon un expert du domaine disent qu'il devrait être fait)
  • Quelle que soit idée d'autre vous avez, validé par un expert du domaine

DDD est un intense travail de refactorisation aussi, une fois que vous obtenez un meilleur aperçu du domaine, donc il est bon d'avoir des tests pour ça, donc vous avez gagné » Avoir peur de faire les changements nécessaires.

Questions connexes