2017-12-18 11 views
1

私たちには、C++で書かれた既存のアプリケーションとリレーショナルデータベースがあります。アプリケーションはC#で書き直す必要があります。ビジネスは、誰が誰が変更したのかを追跡する必要があります。 CQSは読み書きのためにうまくいくようですが、既存のアプリは新しいアプリと一緒に使用する必要があるため、イベントソーシングはほとんど不可能です。既存のC++アプリケーションは、データベースに直接書き込むコンポーネント(データビュー)を使用します。 進化するには、C++アプリケーションの編集可能なテーブルをすべて変更して、新しいアプリケーションにサービスを呼び出す必要があります。これは非常にコストがかかります。Cqrsと既存のリレーショナルデータベースのイベントソース

古いC++アプリケーションを壊すことなく古いものから進化させることができるアーキテクチャが必要であり、それらを連携させる必要があります。

私たちが持っているアイデアは、イベント調達のためのすべてを準備していて、使用していないということです。次に、両方のアプリが書き込むトラッキングテーブルを作成します。ブロックの準備ができたら、新しいアプリでその部分をアクティブにし、古いC++アプリでその部分を無効にします。

しかし実際には、転送中に既存のデータベースに保存するのが最善の瞬間ですか? CommandHandlerでは? EventHandlerでは? UserAddedイベントは、ユーザーが実際に追加されたときにのみ論理的に送信される場合があります。私たちは気分の悪い指揮官を最善の選択とすると思います。

他のアイデアですか?

+0

レガシーC++アプリケーションの誰が&何をしたのかを知る必要がありますか? –

+0

はい、それはGDPR要件ですが、伝統的にはそれほど厳しくはないと言います。我々はリスクを冒したいとは思わないし、両方のために働く解決策を見つけるのが大好きです。最後のmeegingでpop'upという新しいアイデアは、すべてのイベントをSQL Server上で完全に追跡することです。問題は、古いC++アプリケーションがテーブル内のSqlUserを使用し、アプリケーション内の認証されたユーザーではないことです。 – Emmanuel

+0

あなたは単一のデータベースを持っていますか?トランザクションを使用していますか? –

答えて

2

私は、SQLデータベースにトリガを追加し、すべての作成/更新/削除のイベントを生成するのが良いと思います。 次に、新しいCQRSシステムでread-modelを構築するためにこれらのイベントを使用してください。

古いデータベースと新しいデータベースの両方を使用できるため、次に必要なデータベースについて考えてください。 古いデータベースの場合は、新しいCQRSアプリケーション用にsagasで更新する必要があります。そして、両方のアプリは古いデータベースから読み込みます。 新しいデータベースの場合は、読み込みモデルやMongoのような新しいデータベースがあります(またはSQLの場合でもデータのサイズや構造に依存します)。どちらのアプリも新しいデータベースから読み込みます。そして、はい、古いC++アプリケーションでいくつかのコードを変更する必要があります。

私たちが持っているアイデアは、イベント調達のためのすべてを準備していますが、使用していないということです。次に、両方のアプリが書き込むトラッキングテーブルを作成します。ブロックの準備ができたら、新しいアプリでその部分をアクティブにし、古いC++アプリでその部分を無効にします。

CQRSへの移行計画では、2番目の方法を使用することをお勧めします。

関連する問題