1

私のアプリには、ドメイン レイヤーと Web インターフェイスがあります (他のレイヤーについては詳しく説明しません)。

ViewModels オブジェクトを操作する私のビューと、データベースはドメイン オブジェクトを永続化します。
ViewModel オブジェクトをドメイン オブジェクトに変換するには、AutoMapper を使用します。

動作中の Breeze の問題は、新しいオブジェクトを作成するときに、var newCust = manager.createEntity('Customer', {name:'Beta'})これがドメイン オブジェクトであり、ViewModel オブジェクトである必要があることです。

すべてではありませんが、ViewModel がオブジェクト ドメインと似ていない場合があります。たとえば、ドメイン内のオブジェクトのコレクションは次のとおりです。ICollection<Person>一方、ビュー モデルではICollection<int>int は個人の PK です。

質問

これらの場合、そよ風で作業するにはどうすればよいですか?
メタデータを作成してビューモデルの構造も管理し、ビューモデル タイプのオブジェクトを作成できるようにする方法を教えてください。

4

1 に答える 1

1

@ridermansb - AutoMapper について言及したので、マッピングはサーバー上で行われていると想定します。サーバー API で、ドメイン モデル オブジェクトではなく、"ViewModel" (この場合は DTO と呼ぶ場合があります) を公開する必要があります。ViewModel がドメイン オブジェクトを正確に反映している場合があります。時々そうではありません。

クライアントは、API が公開するものだけを見ることができます。これが BreezeJS クライアントの場合、ViewModel をクライアント側のエンティティとして扱う可能性があります。これらは、Breeze がそれらを照会、キャッシュ、変更追跡、および検証することを期待するという意味で、Breeze エンティティです。BreezeJS は、これらの「エンティティ」がサーバー側の DTO に対応するのか、サーバー側のビジネス オブジェクトに対応するのかを認識していません。

もちろん、DTO/ViewModel を使用している場合は、サーバー コードが DTO フォームとドメイン オブジェクト フォーム間の変換を担当します。おそらく、このロジックはサーバー側の API 層とドメイン層の間のどこかにあります。

このアーキテクチャを選択した場合は、ViewModel とドメイン オブジェクト間の双方向の変換を処理することを選択し、それに伴うすべての複雑さと手間を受け入れたことになります。そのスコアについて、あなたにアドバイスする言葉はありません。

では、あなたの質問を言い換えて絞り込みましょう:「サーバー側 API によって公開されたオブジェクト モデルを記述するメタデータを取得するにはどうすればよいですか?」

私のお気に入りの方法 (.NET サーバーを想定) は、EF に任せることです。ドメイン モデル クラスではなく、ViewModel/DTO クラスを参照する DbContext を作成します。もちろん、これらのクラスは実際には実際のデータベースにマップされません。問題ない; その必要はありません。この DbContext を使用してデータにアクセスすることはありません。メタデータを生成するためにのみ使用します。デザイン時のメタデータ生成ツールとして EF を使用している...それだけです。これは効率的な保守可能なアプローチです。

このテクニックを「すぐに」実演したいと思っていますが、最近とても忙しかったので約束はできません。

または、ここで説明されているように、手動でメタデータを書き込むこともできます。

于 2013-07-09T20:06:10.153 に答える