Domanda

Il mio assumere CQRS è quando seguite rigorosamente i comandi non restituisce nulla (tipo restituito void), quindi il mio esempio è molto semplice: Come si fa a recuperare un ID per la creazione di qualcosa di

Per esempio quando si crea una transazione con carta di credito sembra piuttosto importante per restituire un ID di transazione, o durante la creazione di un cliente che sarebbe molto più facile se hai il cliente si è creato o la parte posteriore cliente id così un browser potrebbe passare automaticamente da un la pagina del cliente, per esempio.

Una soluzione potrebbe essere quella di prima chiedere un ID e quindi creare il cliente o transazione con quel ID, ma sembra piuttosto strano.

Qualcuno ha qualche esperienza con questo o ora come dovrebbe essere fatto nel modo più efficace? Forse ho frainteso qualcosa?

È stato utile?

Soluzione

CQRS è tutto il fuoco e dimentica, e dal momento che sono molto affidabili GUID (basso rischio di collisione) non c'è nessun problema l'invio in un GUID che si genera la vostra auto.

La procedura sarebbe fondamentalmente:

  1. Crea il tuo comando
  2. Genera e assegnare la vostra identità (GUID) ad esso
  3. Fuoco del comando
  4. Ritorna l'identità precedente generata

Per saperne di più su GUID su Wikipedia

Altri suggerimenti

array / GUID / byte di integer id di qualsiasi dimensione può essere abbastanza affidabile in pratica, ma tutti non corrisponde al requisito teorico (collisioni avviene), mentre la soluzione teorica valida presente e può essere applicata la maggior parte del tempo.

mi piacerebbe formulare la soluzione come: nella cooperazione la propria identità sistema di pari-livello dovrebbe essere garantito dal sistema di un livello superiore. Sistema di livello superiore è quella che gestisce il ciclo di vita dei sistemi cooperanti.

Esempio :

class John
{
    private readonly int id;

    public John(int id)
    {
        this.id = id;
    }

    public void UseSite(Site site)
    {
        site.CreateAccount(id, "john");

        site.SetPassword(id, "john", "123");

        /* ... */
    }
}

class Site
{
    public void CreateAccount(int humanId, string accName) { /* ... */ }

    public void SetPassword(int humanId, string accName, string pwd) { /* ... */ }

    /* ... */
}

class Program
{
    static void Main(string[] args)
    {
        Site s = new Site();

        // It's easy to guarantee the identity while there's only one object 
        John j = new John(4);

        Console.ReadLine();
    }
}

Program è il modulo di livello superiore. E 'responsabile per l'uso John e Site correttamente. Fornire John con un identificatore unico è una parte di questa responsabilità.

Troverete che è impossibile o molto difficile da affrontare con l'identità di alcuni sistemi di vita reale, come un essere umano. Succede quando questi sistemi sono allo stesso livello di sistema. Esempio tipico è un essere umano e un sito web. Il tuo sito non avrà mai una garanzia che il diritto umano che richiede la pagina. In questo caso si dovrebbe utilizzare l'approccio probabilistico con un hash affidabile.

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