Alcune azioni dell'utente portano naturalmente a situazioni di ricerca o creazione. Ad esempio, l'utente accede a un sistema con un metodo alternativo e find-or-create è chiamato invia email. Oppure, un altro esempio, l'utente viene creato con l'email dell'acquirente. Ma ovviamente, se c'è già un utente, quell'azione provoca il find-or-create. Alcuni database (pensate a loro come basi per i repository di DDD) hanno anche funzionalità avanzate per questi casi.
D'altra parte, ritengo che la ricerca o la creazione non sia veramente un'azione di dominio aziendale. Ovviamente, qui è conservato un invariante di sistema (per uno degli esempi precedenti: "ogni acquirente dovrebbe avere un utente, identificato tramite e-mail").
Potrebbe esserci anche un altro comportamento nel mezzo "se non esiste, creare, quindi restituire esistente". Ad esempio, la registrazione: dobbiamo registrare la creazione separatamente? Annulla: solo "trova" non contiene nulla da annullare, a differenza di "crea"; possono esserci anche altri aspetti, che entrano in gioco nella parte "crea" o solo nella parte "trova", o in entrambi.
Dato questo, come trovare find-or-create dovrebbe essere compreso in DDD (design basato sul dominio)? È un'operazione di basso livello o parte della logica del dominio?
Sono a conoscenza dei dibattiti su quanta logica aziendale dovrebbe vivere nel database per motivi di integrità, questa domanda non riguarda questo. In qualsiasi implementazione pratica le azioni sono suddivise in sotto-azioni (ad esempio, come uno script di transazione). La domanda è se find-or-create è solitamente parte dell'attività o del livello di accesso ai dati sottostante? O forse questo è un esempio di un servizio molto semplice?