私は、開発者がドメイン モデルからビューを抽象化するために使用しているさまざまな方法を発見することに興味があります。
現在、ビューで使用するモデルごとに ViewModel を作成しており、IConverter<TIn,TOut>
そのためのコンバーターがあります。
私が気づいたのは、他の型のコレクションを含む型の場合、階層内の各型の ViewModel と、他のコンバーターを使用して最終的な ViewModel を構築するコンバーターがあることです。
例として:
FluentNHibernate で構築された次のドメイン モデル構造があるとします。
public class User
{
[...]
public virtual IEnumerable<QuestionSubscription> QuestionSubscriptions{get;set;}
}
public class QuestionSubscription
{
public virtual bool VerifiedSubscription{get;set;}
public virtual Question Question{get;set;}
}
私がこれを行っている方法を考えると、これをサポートする 3 つの ViewModels があり、カスタム コンバーターを使用するため、User から Question への変換のチェーンがあります: (簡潔にするためにいくつかの名前を短縮しました)
_userToUserViewModelConverter.Convert(userModel)
|
V
_qSubscriptionToViewModelConverter.Convert(userModel.QSubscriptions)
|
V
_questionToViewModelConverter.Convert(QSubscription.Question)
これはうまく機能しています。これを管理する他の方法について疑問に思っています。
私の最初の質問は、私のドメイン モデルが私のビューに触れないようにすることで、正しいアプローチを取っていると思いますか?
次に、質問 1 に「はい」と仮定すると、コンバーターに他のコンバーターを実行させる同じアプローチを使用しますか、それともコントローラーで一度に 1 つずつ実行しますか?