0

ドメイン オブジェクトをクライアントに公開する方法に頭を悩ませようとしています。リッチ クライアントを使用している場合でも、Web を使用している場合でも、MVP とリポジトリ パターンを使用したいと考えています。

私が理解しようとしているのは、サーバー上にあるリポジトリとモデルを公開する方法です。状態を持つ複雑なビジネス オブジェクトを Web サービス経由で公開することは可能ですか? それとも、.Net リモーティング、EJB、COM+、DCOM など、言語/プラットフォームにとらわれない独自のテクノロジを使用する必要がありますか?

他のいくつかの制約は、複雑なドメイン オブジェクトをデータベースからロードし続けたり、操作を実行するたびにネットワーク全体に渡したりしたくないということです。いくつかの複雑なロジックは、オブジェクトの状態と組み合わせたユーザーのアクセス許可に基づいて、画面の特定の領域が無効または非表示になる可能性があることです。検証およびエラー メッセージ情報もユーザーに表示する必要があります。同じマシン上で実行されているかのように、多くのドメイン オブジェクト操作を論理的に呼び出すことができるようにしたいと考えています。

Web を使用すると、自由に制御できます。サービスの境界を越えてオブジェクトを公開する必要がないため、必要に応じてオブジェクトをリッチにすることができます。モデルを呼び出すクライアントが別のマシン上にある場合に機能する、リッチで機能する N-teir アーキテクチャを作成しようとしています。

4

3 に答える 3

2

ドメインオブジェクトは、RESTまたはWebサービスを介して他のオブジェクトと同じように公開できます。重要なのは、1回の呼び出しでビジネス価値を提供するサービスを公開する必要があることを理解することです。これらのサービスは、必ずしもリポジトリに1:1でマッピングされるとは限りません。したがって、サーバー上のユーザーは、単一のサービス呼び出しで複数のリポジトリーを使用し、さまざまな集計を実行することを期待できますが、あらゆる種類のWebサービスで公開するものは、多かれ少なかれ完全な結果になるはずです。サービスで公開する操作は、個々のリポジトリを公開するのではなく、特定のビジネス価値を提供する意味のある操作に焦点を当てる必要があります。

これがいくらか役立つことを願っています。

于 2009-02-11T08:54:26.833 に答える
2

.NetリモーティングにはSOAPフォーマッターを使用できますが、結果として得られるサービスはおそらくサービスとして利用するのが難しく、非常におしゃべりになります。

ドメインモデルをサービスとして利用したい場合は、サービスとして設計する必要があります。

ドメイン駆動設計で述べられているように、サービスはステートレスであるため、オブジェクトを直接公開することはありません。サービスは、単一のユニットとして実行される意味のあるビジネスオペレーションを提供するメソッドを公開する必要があります。

通常、クライアントのモデルは、サーバー上のモデルとは少し異なるため、クライアントのモデルは異なる境界のコンテキストにあると考えてください。

于 2009-02-11T09:03:33.363 に答える
1

私が理解しようとしているのは、サーバー上にあるリポジトリとモデルを公開する方法です。状態を持つ複雑なビジネス オブジェクトを Web サービス経由で公開することは可能ですか? それとも、.Net リモーティング、EJB、COM+、DCOM など、言語/プラットフォームにとらわれない独自のテクノロジを使用する必要がありますか?

優れたドメイン モデルは非常に行動的であり、問​​題のあるドメイン (およびドメインの専門家との議論) を中心に設計されます。したがって、リモートのコンシューマーに公開されるように設計することには反対します (データベースから設計するのと同じ方法で)。またはGUIを最初にするのは悪い考えです)。

代わりに、REST やメッセージングなどのスタイルの使用を検討し、公開するインターフェースを決定してから、ドメインとの間でマッピングします。したがって、REST を使用する場合は、リソースと API (URL、表現など) を設計し、それをドメイン モデルから実現する必要があります。

これが不自然になった場合は、常に複数のモデルを使用できます。たとえば、個別の読み取り専用プレゼンテーション固有のモデルを同じデータ ソースにマッピングする (または複雑な動作ドメイン モデルをラップする) ことは、私が何度か使用したアプローチです。 .

他のいくつかの制約は、複雑なドメイン オブジェクトをデータベースからロードし続けたり、操作を実行するたびにネットワーク全体に渡したりしたくないということです。

HTTP でのキャッシングとリソースの複数表現のサポートを検討し、データ アクセス ソリューション内でのキャッシングも検討してください。

検証およびエラー メッセージ情報もユーザーに表示する必要があります。同じマシン上で実行されているかのように、多くのドメイン オブジェクト操作を論理的に呼び出すことができるようにしたいと考えています。

これをリソースとして表すか、HTTP ステータス コードとそのような状況で使用するレスポンス ボディを確認することができます。

于 2009-02-22T18:24:55.237 に答える