Pregunta

Mi opinión sobre CQRS es cuando se sigue estrictamente sus comandos no devuelve nada (tipo de retorno void), por lo que mi ejemplo es muy sencillo:? ¿Cómo recuperar un documento de identidad al crear algo

Por ejemplo, cuando la creación de una transacción de tarjeta de crédito parece bastante importante para devolver un identificador de transacción, o al crear un cliente que sería mucho más fácil si usted tiene el cliente que ha creado o la parte posterior Identificación del cliente para un navegador podría llegar automáticamente a esa página al cliente, por ejemplo.

Una solución podría ser pedir primero un ID y luego crear el cliente o transacción con ese ID, pero parece bastante raro.

¿Alguien tiene alguna experiencia con esto o ahora la forma en que debe hacerse de la manera más efectiva? Tal vez tengo algo mal entendido?

¿Fue útil?

Solución

CQRS tiene que ver con el fuego y olvidar, y desde GUID son muy fiables (bajo riesgo de colisión) no existe en el envío de un GUID que generar su propia problema.

Los pasos serían básicamente los siguientes:

  1. Crea tu comando
  2. Generar y asignar su identidad (GUID) para que
  3. Fuego el comando
  4. Vuelta a principios de la identidad generada

Más información sobre el GUID en la Wikipedia

Otros consejos

matrices / GUID / byte de Entero id de cualquier tamaño puede ser lo suficientemente fiable en la práctica, pero todos ellos no se corresponden con el requisito teórico (colisiones ocurre), mientras que existe solución teórica válida y se puede aplicar la mayor parte del tiempo.

I había formular la solución como: en la co-operación del sistema de nivel de igual identidad de uno debe estar garantizada por el sistema de un nivel superior. sistema superior es el que gestiona el tiempo de vida de los sistemas de cooperantes.

Ejemplo :

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 es el módulo de nivel superior. Es responsable de su uso y John Site correctamente. Proporcionar John con un identificador único es una parte de esta responsabilidad.

Usted encontrará que es imposible o muy difícil de tratar la identidad de algunos sistemas de la vida real, como un ser humano. Esto ocurre cuando estos sistemas están en el mismo nivel que su sistema. Un ejemplo típico es un humano y un sitio web. Su sitio nunca tendrá una garantía de que el derecho humano que solicita la página. En este caso se debe utilizar el enfoque basado en la probabilidad con un hash fiable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top