Jak uzyskać identyfikator w create podczas stosowania CQR?

Moje podejście do CQRS polega na tym, że Twoje polecenia nie zwracają niczego (return type void), więc mój przykład jest naprawdę prosty: jak odzyskać ID podczas tworzenia czegoś?

Na przykład podczas tworzenia transakcji kartą kredytową wydaje się raczej ważne, aby zwrócić identyfikator transakcji, lub podczas tworzenia Klienta byłoby znacznie łatwiej, jeśli masz utworzonego klienta lub ID klienta z powrotem, aby przeglądarka mogła przejść automatycznie do tej strony klienta dla przykład.

Jednym z rozwiązań może być najpierw poproszenie o IDENTYFIKATOR, a następnie utworzenie klienta lub transakcji z tym identyfikatorem, ale wydaje się to dość dziwne.

Czy ktoś ma jakieś doświadczenie z tym lub TERAZ Jak to powinno być zrobione w najskuteczniejszy sposób? Może coś źle zrozumiałam?

Author: Tomas Jansson, 2010-12-06

2 answers

W CQRS chodzi o fire-and-forget, a ponieważ GUID są bardzo niezawodne (niskie ryzyko kolizji), nie ma problemu z wysłaniem GUID, który generujesz sam.

Kroki w zasadzie to:

  1. Utwórz swoje polecenie
  2. Wygeneruj i przypisz do niego swoją tożsamość (GUID)
  3. Odpal komendę
  4. zwróć wcześniej wygenerowaną tożsamość

Czytaj więcej o GUID na Wikipedii

 24
Author: Robin Orheden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-05 23:25:20

Tablice / GUIDs / byte Integer id o dowolnej wielkości mogą być wystarczająco wiarygodne w praktyce, ale wszystkie nie odpowiadają wymaganiom teoretycznym (zdarzają się kolizje), podczas gdy ważne rozwiązanie teoretyczne istnieje i może być stosowane przez większość czasu.

Sformułowałbym rozwiązanie jako: w systemie równym poziom współpracy tożsamość człowieka powinna być zagwarantowana przez system wyższego poziomu. System wyższego poziomu to ten, który zarządza żywotnością współpracy systemy.

Przykład :

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 jest modułem wyższego poziomu. Jest odpowiedzialny za prawidłowe użycie John i Site. Częścią tego obowiązku jest dostarczenie John unikalnego identyfikatora.

Przekonasz się, że niemożliwe lub bardzo trudne jest radzenie sobie z tożsamością niektórych systemów rzeczywistego życia, takich jak człowiek. Dzieje się tak, gdy te systemy są na tym samym poziomie, co Twój system. Typowym przykładem jest człowiek i strona internetowa. Twoja strona nigdy nie będzie miała gwarancji to właściwy człowiek żądający strony. W takim przypadku należy zastosować podejście oparte na prawdopodobieństwie z wiarygodnym skrótem.

 0
Author: astef,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-15 13:47:01