2010-02-16 6 views
6

In un'applicazione blog sviluppata utilizzando un design basato su domini, un'entità 'Post' ha una raccolta correlata di entità tag.Domain Driven Design - API di dati esterni come repository o servizio

Durante la creazione del post (ad esempio, popolando l'oggetto dall'interfaccia utente) vorrei chiamare un'API di terze parti tramite REST che prende il contenuto del post ed estrae tag semantici (link text) per l'associazione.

principale Domanda: Qual è il modo migliore per progettare questo ...

E 'meglio progettati in modo che l'entità post avrebbe chiamato un servizio di dominio come PostServices.GetTags (Postcontent) passando il contenuto e recuperando un elenco di tag.?

** PostServices.GetTags dovrebbe quindi integrare l'API REST tramite un'altra classe wrapper.

O l'API di terze parti deve essere impacchettata come repository?

Se la funzione Post.GenerateTags() non dovrebbe esistere all'interno dell'entità di dominio?

Altre domande:

1: ho letto anche che non è buona norma avere un conversare un'entità dominio con un servizio di dominio. È vero?

2: È possibile ottenere un riferimento al servizio di dominio PostServices tramite un metodo di creazione di fabbrica. ad esempio ...

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

3: È accettabile che il servizio di dominio sia abbinato a un'API di terze parti?

4: l'entità di dominio deve semplicemente sapere come gestire i tag ricevuti tramite il livello dell'applicazione che ha chiamato l'API REST.

Lentamente cercando di capire la DDD, tuttavia non riesco a trovare alcun esempio su come implementare questo tipo di cose.

risposta

3

In un'applicazione Blog, un post è un'entità e un tag è un oggetto valore. Un tag non ha identità. Si dovrebbe avere:

  • PostsRepository
  • Post (Entity)
  • Tag (oggetto di valore)

Un Post ha ottenuto un elenco di tag.

Domande:

1: ho letto anche che non è buona norma avere un conversare un'entità dominio con un servizio di dominio. È vero?

Sì, non è una buona pratica. L'entità non desidera essere associata a un servizio di dominio. Se lo fai, allora non potresti riutilizzarli più tardi.Hai considerato di attivare un evento di dominio. Puoi dire al tuo dominio del servizio di fare qualcosa con eventi di domini del fuoco.

2.: È possibile ottenere un riferimento al servizio di dominio PostServices tramite un metodo di creazione di fabbrica. e.g..IPostService PostService = ServiceUtil.GetPostService(); restituire PostService.GetTags (Post.content);

Sì, è possibile. Un metodo factory può restituire una classe astratta o un'interfaccia. Questo è un buon principio di progettazione software "codice per un'interfaccia non a un'implementazione". Se lo fai, sarai in grado di cambiare la tua implementazione in un secondo momento e non dovrai cambiare il tuo codice cliente.

3: È accettabile che il servizio di dominio sia abbinato a un'API di terze parti?

Non ve lo consiglio, ma è accettabile.

Mi dispiace, non capisco domanda 4.

Guardate questo link. Spero ti possa aiutare.

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

+0

Grazie per la risposta, ma io sono ancora un po 'poco chiaro. Stai suggerendo che l'entità Post usi una fabbrica per ottenere un riferimento a un servizio di dominio che fornisce tag. Anche i tag sono unici nel mio sistema e sono identificati tramite una chiave primaria significa che sono un'entità? – sjb101

+0

Ho appena trovato il seguente link che offre una buona spiegazione degli oggetti Value ... http://tech.groups.yahoo.com/group/domaindrivendesign/message/6290 Quindi Tag deve essere un oggetto valore. Comunque torna alla domanda principale sopra ...... – sjb101

+0

No, Post ha una lista di tag. E puoi recuperare i tag da PostsRespository. Un blog è un dominio facile. Hai solo post, tag e commenti. Non capisco perché è necessario un servizio di dominio. Qual è la responsabilità del servizio di dominio yout? – yeraycaballero