Domanda

Sto cercando di ottenere la mia testa intorno come utilizzare correttamente il modello di repository.Il concetto centrale di un Aggregato di Root continua a venire in su.Durante la ricerca sia per il web e di Overflow dello Stack per aiutare con quello che un aggregato di root è, continuo a trovare discussioni su di loro e morto link a pagine che dovrebbero contenere definizioni di base.

Nel contesto del modello di repository, che cosa è un aggregato di root?

È stato utile?

Soluzione

Nel contesto del modello repository, radici di aggregazione sono gli oggetti solo i carichi di codice client dal repository.

Il repository incapsula l'accesso agli oggetti figlio - dal punto di vista di un chiamante li carica automaticamente, sia allo stesso tempo, la radice viene caricato o quando sono effettivamente necessari (come con caricamento pigro)

.

Per esempio, si potrebbe avere un oggetto Order che incapsula le operazioni su più oggetti LineItem. Il tuo codice cliente non avrebbe mai caricare gli oggetti LineItem direttamente, solo il Order che li contiene, che sarebbe la radice aggregata di quella parte del tuo dominio.

Altri suggerimenti

Da Evans DDD:

  

Un aggregato è un insieme di oggetti associati che trattiamo come unità a scopo di modifica dei dati. Ogni aggregato ha una radice e un confine. Il confine definisce ciò che è dentro l'aggregato. La radice è un'unica entità specifica contenuta nell'aggregato.

E

  

La radice è l'unico membro dell'aggregato che oggetti esterni possono contenere riferimenti a [.]

Questo significa che radici di aggregazione sono gli unici oggetti che possono essere caricati da un repository.

Un esempio è un modello contenente un'entità Customer e un'entità Address. Non avremmo mai accedere a un'entità Address direttamente dal modello in quanto non ha senso senza il contesto di un Customer associato. Quindi potremmo dire che Customer e Address insieme formano un aggregato e che Customer è una radice di aggregazione.

Aggregate root è un nome complesso per una semplice idea.


Idea generale

Ben progettato diagramma di classe incapsula il suo funzionamento.Punto attraverso il quale si accede a questa struttura è chiamata aggregate root.

enter image description here

Dettagli di la tua soluzione può essere molto complicato, ma l'utente di questa gerarchia sufficiente utilizzare root.doSomethingWhichHasBusinessMeaning().


Esempio

Controllare questo semplice gerarchia di classi enter image description here

Come si desidera guidare la vostra auto?Scelto meglio api

Opzione A (solo in qualche modo funziona):

car.ride();

Opzione B (utente ha accesso alla classe inernals):

if(car.getTires().getUsageLevel()< Car.ACCEPTABLE_TIRE_USAGE)
    for (Wheel w: car:getWheels()){
        w.spin();
    }
}

Se si pensa che l'opzione A è meglio di congratulazioni.Si ottiene motivo principale dietro aggregate root.


Aggregate root incapsula più classi.è possibile manipolare tutta la gerarchia solo attraverso l'oggetto principale.

Immaginate di avere un'entità computer, questa entità anche non può vivere senza la sua entità software e hardware entità. Questi formano l'aggregato Computer, il mini-ecosistema per la parte del computer del dominio.

Aggregate Root è l'entità madre all'interno dell'aggregato (nel nostro caso Computer), è una pratica comune avere repository funzionano solo con le entità che sono radici di aggregazione, e questa entità è responsabile dell'inizializzazione le altre entità.

Si consideri Aggregate Root come un punto di ingresso a un aggregato.

Nel codice C #:

public class Computer : IEntity, IAggregateRoot
{
    public Hardware Hardware { get; set; }
    public Software Software { get; set; }
}

public class Hardware : IEntity { }
public class Software : IValueObject { }

public class Repository<T> : IRepository<T> where T : IAggregateRoot {}

Tieni presente che hardware sarebbe probabilmente una ValueObject troppo (non hanno identità da solo), lo considerano come solo un esempio.

Se si segue un approccio database prima, è radice di aggregazione è di solito la tabella sul 1 lato di un 1-molti.

L'esempio più comune è una Persona. Ogni persona ha molti indirizzi, scivola di uno o più paga, fatture, le voci di CRM, ecc Non è sempre il caso, ma 9/10 volte è.

Al momento stiamo lavorando su una piattaforma di e-commerce, e abbiamo praticamente avere due radici di aggregazione:

  1. I clienti
  2. Rivenditori

informazioni di contatto di fornitura clienti, assegniamo le operazioni ad esse, le operazioni diventano voci, ecc.

I venditori vendere i prodotti, avere persone di contatto, su di noi pagine, offerte speciali, ecc.

Questi sono presi cura di da parte del Cliente e Venditore repository rispettivamente.

Da un rotto link :

In un aggregato non è un aggregato Root. L'aggregato Root è l'entità padre a tutti gli altri Enti e oggetti di valore all'interno dell'aggregato.

Un repository opera su una radice di aggregazione.

Maggiori informazioni si possono trovare anche qui .

Dinah:

Nel contesto di un repository della Aggregate Root è un'entità con nessuna entità genitore. Esso contiene zero, uno o più entità figlio la cui esistenza dipende dalla controllante per la sua identità. Questo è un uno a molti in un repository. Quelle entità figlio sono aggregati semplici.

 entrare descrizione dell'immagine qui

Di aggregazione si intende la raccolta di qualcosa.
root è come nodo di un albero, da cui si può accedere tutto come <html> nodo nel documento della pagina web.
Blog Analogia, Un utente può avere molti post e ogni post può avere molti commenti.quindi, se recuperiamo qualsiasi utente quindi può agire come root per accedere a tutti i relativi post e commenti di quei posti.Questi sono detto di essere raccolta o Aggregati

aggregato è dove a proteggere i invarianti e la forza consistenza limitando il suo accesso pensato radice di aggregazione. Non dimenticate, aggregata dovrebbe progettare sulle vostre regole di progetto di business e invarianti, non relazionali di database. Non si deve iniettare qualsiasi repository e nessuna query non sono ammessi.

In Erlang non occorre distinguere tra aggregati, una volta che l'aggregato è composta da strutture di dati all'interno dello stato, invece di composizione OO. Vedere un esempio: https://github.com/bryanhunter/cqrs-with -erlang / albero / NDC-london

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top