2017-06-09 4 views
0

CQRSパターンを既存のプロジェクトに適用するよう依頼されました。可能であれば、これは整数のIDを使用するデータベースへのスキーマの変更を行うべきではありません。CQRSパターンで整数IDを使用する

しかし、私が見たCQRSのすべての例ではGuidsを使用していますが、これはCQRSを使用するための固有の要件か、それを適応させる方法があるかどうかです。

(私たちは練習としてこれをやっているので、そのようなことを行う有用性/実用性は問題ではありません)。

+0

CQRSはモデルを2つに分割するので、スキーマを変更しないでください。 –

+0

データベーススキーマを変更する必要があるのはなぜですか?コードはリポジトリパターンを使用しているため、すべての関数は書き込みまたは読み取りのいずれかです。 –

+0

あなたはCQSではなくCQRSについて話しています。 CQRSには、2つの「リポジトリ」、2つのデータベーステーブル、または2つのデータベースがあります。 –

答えて

1

CQRSにGUIDが必要な理由はありません。複数の書き込みサービスが必要な場合は、通常はGUIDSが必要ですが、CQRSは読み書きサービス(およびその2つで使用されるモデル)を分離することにすぎません。

1

コマンドの送信元がIDの中央ディスパッチから独立している必要があるため、CQRSではguidが必要です。彼らは簡単に生成することができます。標準ライブラリがguidを提供しないところでは、実際に暗号ライブラリが優れています。ここで私は行くために使うものです:

func pseudo_uuid() (uuid string) { 

    b := make([]byte, 16) 
    _, err := rand.Read(b) 
    if err != nil { 
     fmt.Println("Error: ", err) 
     return 
    } 

    uuid = fmt.Sprintf("%X-%X-%X-%X-%X", b[0:4], b[4:6], b[6:8], b[8:10], b[10:]) 

    return 
} 

2つのシステムにシステムを分離するだけの方法としてCQRSを見ながら - 状態遷移の世話を1と他のすべてのための1 - あることを観察することが重要ですCQRSのモチベーションはスケーラビリティであり、IDの中央ディスパッチに頼って構築する抽象概念は、スケールアップする際にリファクタリングの労力を要します。

2

CQRSを使用すると、UUIDを持たない(大規模な)分散アプリケーションを作成することができますが、整数IDは分散して動作するシステムの能力を損なう可能性があります。

ここで問題となるのは、ロック、トランザクション、および分散システムに入れたくないこれらすべての種類のものを必要とする中央カウンタに依存することです。

もちろん、はい、もちろんは整数IDを使用しますが、スケーラビリティに関しては悪い考えです。これはあなたのために重要でない場合、それはとにかく(おそらく)動作します。

関連する問題