I contesti limitati dovrebbero contenere solo il codice del dominio?

2

In Domain-Driven Design c'è l'idea di un contesto limitato che è fondamentalmente un modo per stabilizzare un confine entro il quale un certo modello è valido per quanto ho capito. Ho trovato questa idea molto utile perché prima di leggerne una delle principali sfide che ho affrontato per utilizzare correttamente l'orientamento degli oggetti era l'esistenza di ambiguità sul modello (una classe Product che a seconda del contesto potrebbe significare qualcosa diverso, per esempio).

Ora, anche se penso di aver capito un po 'l'idea dei contesti limitati, non sono ancora sicuro su come implementarlo nella pratica.

Il mio dubbio principale, che è quello che sto chiedendo in questa domanda, è il seguente: quando codifichiamo un contesto limitato, dovrebbe contenere solo il codice di dominio o essere un'intera applicazione?

In alcune letture ho l'impressione che un contesto limitato si riferisca a un'intera applicazione. Ma questo sembra non essere in accordo con la comprensione che ho avuto e sul fatto che DDD si occupa solo del modello di dominio. In verità, IMHO il più delle volte siamo interessati a creare un'applicazione, e capita che ci siano diversi contesti all'interno di ciascuno dei termini del linguaggio ubiquitario, sebbene lo stesso significhi cose diverse. In questo caso non intendiamo creare diverse applicazioni, ma solo una.

In tal caso, quando si implementano i contesti con DDD, dovrebbero contenere solo il modello di dominio per quel contesto o essere un'intera applicazione?

    
posta user1620696 02.08.2015 - 18:56
fonte

1 risposta

5

Se comprendo correttamente la tua domanda, non penso che il contesto limitato abbia per essere un'applicazione separata, sebbene possa essere.

Se stai costruendo, ad esempio, un sistema di prenotazioni alberghiere, potresti avere un contesto "ospite" e un contesto "hotel" - il contesto ospite potrebbe modellare nomi, indirizzi, punti premi e simili; il contesto dell'hotel potrebbe modellare proprietà, stanze e così via.

Potresti costruirle come due sistemi separati, forse come un insieme di servizi per gli ospiti e di servizi alberghieri che interagiscono in punti accuratamente definiti. Oppure puoi costruirlo come un singolo sistema, in cui i due contesti abitano la stessa base di codice, ma esistono come pacchetti o moduli separati, liberamente accoppiati.

In ogni caso, rispetti i contesti limitati. Quale percorso scegliere dipenderà più da considerazioni quali requisiti di prodotto, prestazioni, scalabilità, skillset di squadra e simili.

Dove inizi a sbagliare, naturalmente, è se parti dei contesti limitati iniziassero a filtrare l'una nell'altra - se una classe nel contesto di Hotel memorizza l'assegnazione di una stanza per l'Ospite, ad esempio, sembra un problema .

Potresti, tuttavia, avere un modello di "Prenotazione" che sta a cavallo tra i contesti Guest e Hotel. Di nuovo, tuttavia, tutto questo potrebbe far parte della stessa base di codice e dell'applicazione, oppure potrebbero essere applicazioni separate che interagiscono tra loro. Direi che è un dettaglio di implementazione, anche se importante.

    
risposta data 02.08.2015 - 19:45
fonte

Leggi altre domande sui tag