Ho letto molto sull'ID auto-incrementale (guid, interlocked.increment, ObjectIdGenerator ...) ma non trovo nulla per la mia situazione.
Nel mio modello di dominio, l'utente chiede di avere un ID numerico progressivo automatico per ogni attività che creano.
Poiché si tratta di una richiesta utente, desidero inserirla nel mio modello di dominio, ma la modalità che di solito faccio in un'applicazione meno recente senza una buona architettura) è l'accesso al database, il recupero del massimo e l'aggiunta di 1; quindi non posso farlo nel mio oggetto dal momento che il livello di dominio non deve essere a conoscenza di db.
Non mi piace l'identità di db per mancanza di controllo (a volte l'amministratore di db deve modificare l'id per l'errore dell'utente alla creazione di attività).
interlocked.increment ha un bell'aspetto ma la mia applicazione è installata su ogni macchina utente, quindi non posso usarla
Poiché deve essere comprensibile e progressivo, non posso usare guid
Trovo una buona idea nell'articolo di Lev Gorodinski sul Domain di servizio in Domain-Driven-Design: definisci l'interfaccia di un GenerateActivityId nel livello di dominio come un servizio di dominio, ma non trovo un modo per fare una buona implementazione di esso.
Qualche suggerimento?
EDIT: Idea di Lev Gorodinski:
public class Activity {
public int Id {get; private set;}
public string Description {get;set;}
public Activity (string description){
this.Description = description
this.Id = generator.GenerateId()
}
}
public interface IIdGenerator{
int GenerateId()
}
ma non vedo dove è definito "generatore" e non ho trovato l'implementazione di IIdGenerator: dove devo inserire l'implementazione? In ActivityRepository? Se sì, posso omettere IIdGenerator per IActiviryRepositoryInteface?