2009-07-02 6 views
6

Sto leggendo http://en.wikipedia.org/wiki/Domain-driven_design in questo momento, e ho solo bisogno di 2 esempi rapidi, quindi capisco cosa "valore oggetti" e "servizi" sono nel contesto di DDD.Principiante di domini, per favore spiega brevemente "oggetti valore" e "servizi"

  • Oggetti valore: un oggetto che descrive una caratteristica di una cosa. Gli oggetti valore non hanno identità concettuale. Sono in genere oggetti di sola lettura e possono essere condivisi utilizzando il modello di progettazione Flyweight.

  • Servizi: quando un'operazione non appartiene concettualmente a nessun oggetto. Seguendo i contorni naturali del problema, è possibile implementare queste operazioni nei servizi. Il concetto di servizio si chiama "Pure Fabrication" in GRASP.

Valore objexts: qualcuno può darmi un semplice esempio per favore?

Servizi: quindi se non è un oggetto/soggetto, né appartengono al repository/fabbriche poi il suo servizio? Non lo capisco

risposta

7

L'esempio archetipico di un oggetto valore è denaro. È molto probabile che se costruisci un'applicazione di e-commerce internazionale, vorrai incapsulare il concetto di "denaro" in una classe. Ciò ti consentirà di eseguire operazioni su valori monetari - non solo l'aggiunta di base, la sottrazione e così via, ma probabilmente anche le conversioni di valuta tra USD e, ad esempio, Euro.

Tale oggetto denaro non ha identità intrinseca - contiene i valori che ci metti dentro, e quando si smaltisce esso, non c'è più. Inoltre, due oggetti Money contenenti 10 USD sono considerati identici anche se sono istanze di oggetti separate.

Altri esempi di oggetti di valore sono misure quali la lunghezza, che potrebbero contenere un valore ed un'unità, come ad esempio 9,87 km o 3 piedi. Di nuovo, oltre a contenere semplicemente i dati, un tipo simile probabilmente offrirà metodi di conversione ad altre misurazioni e così via.

I servizi, d'altra parte, sono tipi che eseguono un'importante operazione di dominio, ma non si adattano molto bene nell'altro, più concetti basati su "nomi" del dominio. Dovresti cercare di avere il minor numero possibile di Servizi, ma a volte un Servizio è il modo migliore per incapsulare un importante Concetto di Dominio.

Ulteriori informazioni su Value Objects, Servizi e molto altro nell'eccellente libro Domain-Driven Design, che posso solo raccomandare.

3

Valore oggetti: un esempio tipico è un indirizzo. L'uguaglianza si basa sui valori dell'oggetto, da cui il nome e non sull'identità. Ciò significa che ad esempio 2 oggetti Person hanno lo stesso indirizzo se i valori dei loro oggetti Address sono uguali, anche se gli oggetti Address sono 2 oggetti completamente diversi in memoria o hanno una chiave primaria diversa nel database.

Servizi: offrire azioni che non appartengono necessariamente a un oggetto di dominio specifico ma agiscono sugli oggetti di dominio. Ad esempio, sto pensando a un servizio che invia notifiche via e-mail in un negozio online quando il prezzo di un prodotto scende al di sotto di un certo prezzo.

InfoQ ha un libro gratuito su DDD (una sintesi del libro di Eric Evan): http://www.infoq.com/minibooks/domain-driven-design-quickly

Problemi correlati