Question

Mon point de vue sur CQRS est strictement suivi quand vos commandes ne retourne rien (retour de vide de type), de sorte que mon exemple est vraiment simple:? Comment récupérer une carte d'identité lors de la création quelque chose

Par exemple lors de la création d'une transaction par carte de crédit, il semble assez important de retourner un numéro de transaction, ou lors de la création d'un client, il serait beaucoup plus facile si vous avez le client que vous avez créé ou le dos identifiant client donc un navigateur pourrait naviguer automatiquement cette page client par exemple.

Une solution pourrait être d'abord demander une carte d'identité, puis créez le client ou d'une transaction avec cet ID, mais il semble assez bizarre.

Quelqu'un at-il une expérience avec ce ou maintenant comment il devrait être fait dans la façon la plus efficace? Peut-être que j'ai mal compris quelque chose?

Était-ce utile?

La solution

CQRS est tout feu et oublier, et depuis GUIDs sont très fiables (faible risque de collision) il n'y a pas de problème dans l'envoi d'un GUID que vous générez votre auto.

Les étapes seraient pour l'essentiel:

  1. Créez votre commande
  2. Générer et affecter votre identité (GUID) pour le
  3. Feu la commande
  4. Retour l'identité antérieure généré

En savoir plus sur GUIDs sur Wikipedia

Autres conseils

Les tableaux de id Entier / GUIDs / octet de toute taille peut être assez fiable à la pratique, mais ils ont tous ne correspondent pas à l'exigence théorique (collisions se produit), tandis que la solution théorique valide existe et peut être appliquée la plupart du temps.

Je formuler la solution comme: dans une identité de co-fonctionnement du système de niveau égal devrait être garantie par le système d'un niveau supérieur. système de niveau supérieur est celui qui gère la durée de vie des systèmes coopérants.

Exemple :

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 est le module de niveau supérieur. Il est responsable de l'utilisation John et Site correctement. Fournir John avec un identifiant unique est une partie de cette responsabilité.

Vous trouverez qu'il est impossible ou très difficile de faire face à l'identité de certains systèmes de la vie réelle, comme un être humain. Il se produit lorsque ces systèmes sont sur le même niveau que votre système. Un exemple typique est un être humain et un site Web. Votre site ne sera jamais une garantie que le droit de l'homme demande la page. Dans ce cas, vous devez utiliser l'approche basée sur la probabilité d'un hachage fiable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top