2017-05-20 15 views
0

私はDDDのアプリケーションを持っていると私はSignalRが私の層に収まるかを理解しようとしています:新しいデータがある場合にSignalRはどこにDDDアーキテクチャに属していますか?

1. Presentation (Angular) 
2. Distributed Services (Web API) 
3. Application 
4. Domain 
5. Data 

は基本的に、私のSignalRハブは、クライアント(角度ウェブアプリ)を通知します。私はバックグラウンド・サービスでバックグラウンド・サービスを実行します。バックグラウンド・サービスでは、間隔でデータベースをチェックし、新しいデータがあるときにクライアントに通知します。

私は、このように考えることが傾いています:

  1. SignalRハブはPresentation層に属します。私のプレゼンテーションプロジェクトが純粋にクライアントサイド(Angular)であることを考えると、私はハブのためだけにプレゼンテーションの下に新しいプロジェクトを追加します。
  2. Applicationレイヤでは、一定間隔でデータベースをチェックするバックグラウンドサービスが適切と思われます。私はNotifyメソッドでINotifyインターフェイスを挿入します。これはSignalRで実装します。

これはDDDの原則に沿っていますか?

答えて

3

DDDはすべてだけ明確に定義された方法で起こるあなたのデータにを変更し、その変更を実行するコードは、全体ではよく理解されてUbiquitious言語からで定義されていることを確実にすることについてですビジネス全体(開発チームだけでなく)

DDDは、ユーザーや他のシステムとのインターフェイスに使用されるメカニズムではなく、階層化されたアーキテクチャを推奨しています。

だから - 私はここでDDDについてはあまり心配しないだろう - それはあなたの全体的なアーキテクチャのアプローチを検討する価値がある - と階層アーキテクチャのパターンの面で、あなたのアプローチによく一致するものがポート&アダプタまたはと呼ばれていますオニオンアーキテクチャ。 (1および2

このアーキテクチャでは、システムの外部は、特定のテクノロジとアプリケーション層の間で調整される一連のアダプタと見なされます。あなたの場合、WebAPIレイヤーはアダプターの例です。

新しいSignalRアダプターを作成することをお勧めします.WebAPIアダプターと同じ「レベル」で考えることができます(ただし、ポートとアダプター用語では「出力」アダプターなので、右下の図タマネギの)。

あなたのバックグラウンドプロセスの場所に関して - 個人的には、アプリケーションレイヤーの一部であるとは考えていません。アプリケーションのユースケースやプロセスフローを導くことはありません。つまり、SignalRアダプタに挿入したり、新しい専用コンポーネントを作成することができます。

DDDのもう1つのコンセプト - DomainEventsがあります。バックグラウンドスレッドの必要性を完全に取り除くことができます。 SignalRアダプタには、DomainEventsを処理するために登録するイベントハンドラが含まれています。これらのハンドラでは、イベントに関する情報をSignalRを介してクライアント側のプレゼンテーションレイヤに伝播します。 (警告 - ドメインイベントの実装によっては、集計が正常に持続される前に、SignalR経由でイベントを宣伝するリスクを考慮する必要があるかもしれませんが、それは全体的な話題です。)

+0

ありがとう、ありがとう、ありがとう! – user11081980

関連する問題