2012-04-12 11 views
1

例では、私は次のような階層を持つオブジェクトモデルからデータクラスを持って言うことができます:階層データをビューに渡すためのベストプラクティス/プリファレンス?簡単にするために

  • 著者
    • ブック

これらのデータクラスのそれぞれは、親ではなく子であるインスタンスのインスタンスへの参照を、それらの親にはIdのみが含まれるようにします。たとえば、BookにはBook.Chaptersがありますが、その親(つまりBook.Author)への参照がなく、代わりに親のID(Book.AuthorIdなど)があります。

今、この階層の「ブレッドクラム」を私のビューに表示したいと思います。

  1. は、各ビュー用のカスタムモデルを作成します。しかし、そうするために、私はそれを見て、私は次のオプションを持っているので...などAuthor.Name、Book.Nameなどの情報を取得する必要があります。つまり、新しいSingleBookViewModel {TheAuthor = DB.GetAuthor(book.AuthorId)、TheBook = book}

  2. この本からビュー自体のデータを取得します。たとえば、私がブックビューを持っていれば、私は使用することができます:Author author = GetAuthor(book.AuthorId)...これをかみそりビュー内で行います。

  3. Tupleクラスを使用してデータを渡します。

    Tuple<Author, Book, Chapter>

あなたがメソッドを使用します。チャプターを表示するので、私は、次のシグネチャを持つタプルを持つモデルを移入しますか?あるいは何か違うものを使っていますか?

現在、私はタプルで3番目の方法を使用しています。

第2の方法が最も標準的である可能性が高い。しかし、私はそれらの背後にある各データクラス(Author、Book、Chapter)に対応するビューモデルクラスを作成し、維持するという考え方は嫌いです。

このようなことを人々が「ベストプラクティス」としていること、そしてタプルを使用することが意味をなさないことを理解したいと思います。

答えて

1

これをViewModelsで実装します。それぞれのビューは、そのビューに必要なすべてのデータを含むViewModelに強く型付けされます。そのViewModelには、章の集まりを含む本のコレクションを含むAuthorsのコレクションがあります。

別の方法として、ビューを著者のコレクションにバインドすることができます。著者の選択に応じて、Json形式の書籍を返すコントローラのアクションにajax getリクエストを行います。章も同様です。

+0

残念ながら、Ajax/JSONは、データが静的(ビューがレンダリングされた後は変更されないことを意味します)で、パンくずリストのため、情報をユーザから非常にわかりやすく表示する必要があるため、開始。 – Skonen

+0

次に、パンくずリストに表示する必要があるデータであっても、必要なすべてのデータをラップするViewModelオブジェクトを作成します。あなたのビューは受け取ったものをレンダリングするだけです。これはうまくいかないでしょうか? – Dante

+0

はい。唯一の欠点は、これらのビューモデルの作成/メンテナンスのヒットに関する私の質問で言及したものです。 – Skonen

関連する問題