2010-02-16 9 views
6

Dans une application de blog développée à l'aide d'une conception pilotée par domaine, une entité «Post» possède une collection connexe d'entités de balise. Lors de la création de la publication (par exemple le remplissage de l'objet à partir de l'interface utilisateur), je voudrais appeler une API tierce via REST qui prend le contenu de la publication et extrait les étiquettes sémantiques (link text) pour l'association.Conception pilotée par domaine - API de données externes en tant que référentiel ou service

Question principale: Quelle est la meilleure façon de concevoir ce ...

est-il mieux conçu de telle sorte que l'entité Poste appellerait un service de domaine tel que le passage de son contenu PostServices.GetTags (Postcontent) et récupérer une liste de balises.? ** PostServices.GetTags serait ensuite inteface avec l'API REST via une autre classe wrapper. Ou l'API tierce doit-elle être encapsulée en tant que référentiel?

La fonction Post.GenerateTags() ne devrait-elle pas exister du tout dans l'entité de domaine?

D'autres questions:

1: J'ai aussi lu que ce n'est pas bon d'avoir une entité de domaine converse avec un service de domaine. Est-ce vrai?

2: Est-il acceptable d'obtenir une référence au service de domaine PostServices via une méthode de création en usine. par exemple

IPostService PostService = ServiceUtil.GetPostService(); return PostService.GetTags (Post.content);

3: Est-il acceptable d'avoir le service de domaine couplé à une API tierce? 4: L'entité de domaine doit-elle simplement savoir comment traiter les étiquettes reçues via la couche d'application qui a appelé l'API REST?

Lentement, j'essaie de contourner DDD, mais je n'arrive pas à trouver des exemples de la façon de mettre en œuvre ce genre de chose.

Répondre

3

Dans une application de blog, un article est une entité et une étiquette est un objet de valeur. Un tag n'a pas d'identité. Vous devriez avoir:

  • PostsRepository
  • Post (entité)
  • Tag (objet de valeur)

A Post a obtenu une liste de tags.

Questions:

1: J'ai aussi lu que ce n'est pas bon d'avoir une entité de domaine converse avec un service de domaine. Est-ce vrai?

Oui, ce n'est pas une bonne pratique. Votre entité n'a pas envie d'être couplée à un service de domaine. Si vous faites cela, vous ne pourrez pas les réutiliser plus tard.Avez-vous envisagé de déclencher un événement de domaine? Vous pouvez indiquer à votre domaine de service d'effectuer des événements de domaine incendie.

2.: Est-il correct d'obtenir une référence au service de domaine PostServices via une méthode de création en usine. par exemple, IPostService PostService = ServiceUtil.GetPostService(); return PostService.GetTags (Post.content);

Oui, c'est possible. Une méthode usine peut renvoyer une classe abstraite ou une interface. C'est un bon principe de conception de logiciel "code à une interface pas à une implémentation". Si vous faites cela, vous pourrez changer votre implémentation plus tard et vous ne devrez pas changer votre code client.

3: Est-il acceptable que le service de domaine soit couplé à une API tierce?

Je ne vous le recommande pas, mais c'est acceptable.

Désolé, je ne comprends pas la question 4.

Regardez ce lien. J'espère que cela t'aidera.

https://stackoverflow.com/questions/901462/ddd-where-is-it-most-appropriate-to-get-a-list-of-value-objects/901562#901562

+0

Merci pour la réponse, mais je suis encore un peu clair. Suggérez-vous que l'entité Post utilise une fabrique pour obtenir une référence à un service de domaine qui fournit des étiquettes. Egalement les balises sont uniques dans mon système et sont identifiées via une clé primaire cela signifie-t-il qu'elles sont une entité? – sjb101

+0

Je viens de trouver le lien suivant qui offre une bonne explication des objets de valeur ... http://tech.groups.yahoo.com/group/domaindrivendesign/message/6290 So Tag doit être un objet de valeur. Quoi qu'il en soit, retour à la question principale ci-dessus ...... – sjb101

+0

Non, Post a une liste de tags. Et vous pourriez récupérer des étiquettes de PostsRespository. Un blog est un domaine facile. Vous avez seulement des articles, des tags et des commentaires. Je ne comprends pas pourquoi vous avez besoin d'un service de domaine. Quelle est la responsabilité de votre service de domaine? – yeraycaballero

Questions connexes