2017-03-27 15 views
0

私は主にサーバーサイドレンダリングアプリケーションをやっていますが、今はクライアントサイドレンダリング用のWebApi + javascriptフレームワークを開始しています。RESTでの複雑なオブジェクトの作成

Userを作成するフォームにOrganizationのフィールドがあり、1つのトランザクションでUserと一緒に作成されるような兆候があります。サーバー側のレンダリングを行う場合は、フォームのすべてのフィールドを持つCreateUserViewModelを作成し、コントローラの動作はCreateUserViewModelとなり、次にCreateUserViewModelフィールドをUserOrganizationエンティティフィールドにマップします。

しかし、私がREST APIを作成している場合、ViewModelにはフォームからのすべてのフィールドが含まれていますが、これはコントローラのアクションメソッドのパラメータですか?または、2つの別個のメソッドPOST: /users i POST: /organizationsをクライアント側で入力フィールドからUserOrganizationにマッピングし、それらを別々に呼び出す必要がありますか? 2番目のオプションが正しい方法であれば、どうすればそれをトランザクションにすることができますか?

+1

"2番目のオプションが正しい場合は、どうすればトランザクションにすることができますか?"トランザクションが必要な場合は、2番目のオプションが正しい方法ではありません。しかし、あなたはそれがトランザクションである必要があるかどうかを検討するかもしれません。詳細を述べることは難しいですが、ユーザーが組織のメンバーになることが予想されるため、おそらくトランザクションを使用せずに組織を最初に作成することができます。 – Joe

+0

これはトランザクションでなければなりません。ユーザーは登録時に組織の詳細を入力する必要があります。別の組織なしで存在することはできません。私の仕様ではなく、クライアントが望む方法です。 – Aleksa

+1

@Alexsaの場合、組織の詳細は基本的にデータモデル内のユーザーの属性であることを暗示しているようです(つまり、同じ組織に1人以上のユーザーがいない)。この場合、ユーザーと組織の別々の呼び出しの2番目のオプションは正しい方法ではありません。 – Joe

答えて

0

コントローラでアクションを分離し、2つの分離したビューモデルをそれらに送信する方がずっと優れています。トランザクションとしてクルードを実行するか、エンティティフレームワークを使用している場合はユニットパターンを使用できます。 いくつかの他の形式では、単にユーザーを追加したいと考えています。最初の方法を選択した場合、空のフィールドが多い大きなビューモデルを送信する必要があります。 BR MReza

関連する問題