I am modelling UserAggregate using DDD concepts. I know that two separate users should be independent, but when creating a new user, I need to validate, that there is no other user with the same username. How do I approach such a situation?
Il termine di ricerca per questo tipo di problema è set validation .
Alcune risposte comuni
1) Indaghi e scopri che la "regola" in realtà non è tanto importante per il business, e quindi fai il massimo sforzo per evitare collisioni e rapporti di incidenti / eccezioni che rilevano possibili conflitti per la risoluzione umana . "Se quel nome non era in uso un secondo fa, abbastanza buono - ci occuperemo delle corse di dati a mano."
2) Punt e l'onere di mantenere la regola aziendale sull'appliance di archiviazione. Vale a dire, si archiviano tutti gli utenti in un database relazionale e si applica il vincolo di unicità lì. Questo non si adatta a tutte le opzioni di archiviazione: lo storage NoSQL probabilmente avrà un problema qui.
3) Aggiornate il vostro modello, in modo che il set che deve essere valido sia un aggregato a se stesso. Per un caso come questo, il "set" sarebbe probabilmente qualcosa di simile a una mappa di nomi utente sugli identificatori dell'utente.
4) Aggiorna il tuo processo, in modo che tutte le richieste per un determinato nome utente vengano instradate allo stesso stesso utente - analogamente all'utilizzo del nome utente come identificativo dell'utente.
5) Riconosci che la gestione degli utenti non è una preoccupazione unica per la tua azienda, e trovi una soluzione off the shelf e ad adatta i tuoi processi ad essa. Se gli utenti non sono il tuo core business, questa è spesso la strada giusta da percorrere.