サービスとしての豊富なドメインオブジェクトを公開
-
22-08-2019 - |
質問
私はクライアントに私のドメインオブジェクトを公開する方法のまわりで私の頭をラップしようとしてきました。私はリッチクライアントを使用していますか私は、Webを使用しているかどうか、私はMVPとリポジトリのパターンを使用します。
私は周りに私の頭をラップしようとしていることは、私は、サーバー上になり、私のリポジトリとモデルを公開する方法です。 Webサービス経由で状態を持っているか、私は.NETリモート、EJB、COM +、DCOM、などのように、言語/プラットフォームに依存しないではない独自の技術を使用する必要があります複雑なビジネスオブジェクトを公開することも可能ですか?
他のいくつかの制約が、私は、データベースから複雑なドメインオブジェクトをロードしたり、すべてのワイヤ上で、私が操作をしたいたびにそれを渡す保つためにしたくないということです。いくつかの複雑なロジックは、画面の特定の領域は、オブジェクトの状態と組み合わせて、ユーザーの権限に基づいて無効にしたり、目に見えないかもしれないということかもしれません。検証と、エラーメッセージ情報は、ユーザーに表示する必要があります。私はそれは同じマシン上で実行されていたかのように論理的に私のドメインオブジェクトの操作の多くを呼び出すことができるようにしたい。
ウェブを使用すると、行動の自由を持っています。あなたが希望としてそれら豊かにできるようにするには、サービスの境界を越えて、あなたのオブジェクトを公開する必要はありません。私は豊富で、モデルを呼び出すクライアントが異なるマシン上にあるときに動作するN-teirアーキテクチャを作成しようとしています。
解決
あなたはRESTやWebサービスを介して、他のオブジェクトのようなあなたのドメインオブジェクトを公開することができます。私は、キーはあなたが単一の呼び出しでビジネス価値を提供するサービスを公開する必要があることを理解することであると思うし、これらは必ずしも1マップされません:あなたのリポジトリに1を。サーバー上の複数のリポジトリを使用して、さまざまな集計を実行するための単一のサービスコールを期待することができ、一方だから、あなたがウェブ・サービスのいずれかの種類を超える公開する事は、多かれ少なかれ完全な結果でなければなりません。あなたがサービスを公開する操作は、個々のリポジトリを公開するのではなく、特定のビジネス価値を提供し、意味のある事業に焦点を当てるべきではありません。
私は、これはやや役立ちます願っています。
他のヒント
あなたは、.NETリモート処理用のSOAPフォーマッタを使用することができ、 しかし、結果としてサービスはおそらく難しいだろう サービスとして消費する、そしてそれは無愛想な非常におしゃべりになります。
あなたのドメインモデルをサービスとして消費されるようにしたい場合は、、それがサービスとして設計する必要があります。
ドメイン駆動設計で述べたように、、サービスはステートレスなので、直接あなたのオブジェクトを公開しません。あなたのサービスは、単一のユニットとして実行される意味のある業務を提供する方法を公開する必要があります。
通常その懸念は、サーバー上のものとは少し異なるものになりますので、あなたのクライアントでモデルが異なる有界コンテキストであることを考慮します。
私の周り私の頭をラップしようとしている何 どのように私は私のリポジトリを公開し、 サーバー上になるモデル。あります それも可能複合体を露出させ、 経由して状態を持つビジネスオブジェクト Webサービス、または私が使用する必要があります ではない独自の技術 ネットのような言語/プラットフォームに依存しません、 リモーティング、EJB、COM +、DCOM、など?
良いドメインモデルは非常に行動し、問題領域を中心に設計されたことになるだろう(とドメイン専門家とあなたのクチコミ)されて、私はこのようにそれを設計するのと同じ方法で(リモートコンシューマにさらされるために、それを設計に反論したいですデータベースまたはGUIから最初の)悪い考えです。
その代わり、私はRESTやメッセージングのようなスタイルを使用して見て、あなたが公開し、その後に/ドメインからマップするインターフェイスを決定したいです。あなたはRESTと一緒に行ったのであれば、あなたのリソースとAPI(URLの、表現など)を設計したいとあなたは、ドメインモデルから、それを満たすために必要があると思います。
これは非自然になった場合は、あなたは、常に同じデータ・ソースに別々の読み取り専用のプレゼンテーション特定のモデルをマッピングたとえば、複数のモデルを持っている(または複雑な行動ドメインモデルをラップする)ことができ、私はきたアプローチであります数回使用ます。
他のいくつかの制約があることですI ロード維持する必要がありますする必要はありません から複雑なドメインオブジェクト すべての上にデータベースまたは渡します ワイヤー私がやりたいたびに 操作
HTTPでのキャッシングを見て、リソースのための複数の表現をサポートし、また、データ・アクセス・ソリューション内のキャッシングを見てみます。
検証とエラーメッセージ 情報もする必要があります。 ユーザに表示されます。私はなりたいです 論理的に私の多くを呼び出すことができます ドメインオブジェクトの操作、それはあたかも 同じマシン上で実行されている。
あなたがそのような状況で使用したいと思いHTTPステータスコードとレスポンスボディで、リソースまたは複数の可能性を見て、これを表現することができます。