2017-01-05 16 views
0

共通ロジックを共有するいくつかのコマンドがあるとします。たとえば、私は文書にいくつかの状態があります。いくつかの州では可能な変異操作がありますが、その状態によってはロジックの一部が異なります。 1つのCommandIfステートメントを4つ以上のステートに使用することは混乱します。各操作の方が優れているため、別々のコマンドを作成できますが、一般的なロジックはどうすればよいでしょうか?CQRS一般的な操作を行うコマンド - 重複したコード

DBからデータをフェッチし、検証し、いくつかのサイド文書を生成し、監査テーブルなどに書き込む必要があります。だから、それは普通の場所でなければならないと思われ、無意味なものを作ることは最悪の選択です。Helperクラスです。私はこの操作がトランザクションを必要とすることができる/できないと仮定します。

私はhttp://scrapbook.qujck.com/holistic-abstractions-take-2/CQRS code duplication in commandsを読みました。私は他のオプションを探しています。

答えて

2

@Redgood、私が間違っていない場合、あなたが記述するもののいくつかはドメインに属します。

ビジネス/ドメインの「ロジック」がドメイン外に流出していないことを確認してください。私はコマンドをマークするためにICommandインターフェースを使用しますが、そこにはいくつかのロジックがありますが、データタイプのバリデーションやその他のタイプのインテグリティチェックのためだけです。

そのままにしてください。コマンドの観点からは、コマンドに含まれているデータが良好であることが気になるだけです。それでおしまい。だから、コマンド内のすべてのメソッドがその完全性を強制するだけであることを確認してください。

+0

あなたはそのユーザーがその_Document_で「更新」を行う特権を持っていることを確認する必要があるのですが、コマンドを発行する前に確認する必要があります。次に、そのコマンドを実行するために必要なすべてのデータを、前にフェッチしてパラメータとして渡す必要がありますか?だから、潜在的にすべての重複したコードはコマンドの外にあるべきですか? – RedgoodBreaker

+0

さて、コントローラー/アクションレベルでいくつかのセキュリティチェックを行うことができます。これはWeb APIで簡単に行うことができます。独自の "検証"ロジックなどを作成する必要がありますが、これは多くの作業ではありません。また、最初のチェックに合格し、余分な "ビジネスセキュリティチェック"が必要な場合は、CommandHandlerで行うことができます。また、私はCommandHandlerを呼び出す前にDecoratorsクラスでそれを行うのが好きです。タマネギを考えて、あなたのコマンドハンドラを中心に近づけてください。あなたの「セキュリティチェック」は、ほとんど外の層にあります。デコレータはあなたのための解決策かもしれません。 –

+0

あなたはあなたが書くものの良い例を見たことがありますか?私が提供したリンクを数えない? – RedgoodBreaker

関連する問題