質問

CQRについての私の見解は、厳密に従うと、コマンドは何も返さない(タイプのvoidを返す)ので、私の例は本当に簡単です。何かを作成するときにIDを取得するにはどうすればよいですか?

たとえば、クレジットカードのトランザクションを作成するとき、トランザクションIDを返すことはかなり重要であると思われます。また、顧客を作成するときは、作成した顧客や顧客IDを取り戻すと、ブラウザがその顧客ページに自動的にナビゲートできるようにすると、はるかに簡単になります。例えば。

解決策の1つは、最初にIDを要求してから、そのIDで顧客またはトランザクションを作成することですが、かなり奇妙に思えます。

誰かがこれについて何か経験をしていますか、それとも最も効果的な方法でどのように行うべきか?多分私は何かを誤解しましたか?

役に立ちましたか?

解決

CQRSはすべて火災と忘れられています。ガイドは非常に信頼性が高い(衝突のリスクが低い)ため、自分自身を生成するガイドを送信するのに問題はありません。

手順は基本的に次のとおりです。

  1. コマンドを作成します
  2. あなたの身元(GUID)を生成して割り当てます
  3. コマンドを発射します
  4. 以前に生成されたアイデンティティを返します

詳細を読んでください ウィキペディアのガイド

他のヒント

任意のサイズの整数ID / GUIDS /バイト配列は実践で十分に信頼できる可能性がありますが、それらはすべて理論的要件に対応していません(衝突は発生します)が、有効な理論的解は存在し、ほとんどの場合適用できます。

私はソリューションを策定します:等レベルのシステムでは、より高いレベルのシステムによって自分のアイデンティティが保証されるべきです。高レベルのシステムは、協力システムの寿命を管理するシステムです。

:

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 高レベルのモジュールです。使用する責任があります JohnSite 正しく。提供する John 一意の識別子がこの責任の一部です。

あなたは、人間のようないくつかの現実のシステムのアイデンティティに対処することは不可能または非常に難しいことがわかります。これらのシステムがシステムと同じレベルにある場合に発生します。典型的な例は、人間とウェブサイトです。あなたのサイトには、適切な人間がページを要求するという保証がありません。この場合、信頼できるハッシュで確率ベースのアプローチを使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top