【发布时间】:2012-06-21 19:27:03
【问题描述】:
我有兴趣发现开发人员用来将他们的视图从他们的领域模型中抽象出来的不同方式。
目前,我为要在视图中使用的每个模型创建一个 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 个 ViewModel 来支持这一点,并且由于我使用我的自定义转换器,因此将有一个从用户到问题的转换链: (为简洁起见缩短了一些名称)
_userToUserViewModelConverter.Convert(userModel)
|
V
_qSubscriptionToViewModelConverter.Convert(userModel.QSubscriptions)
|
V
_questionToViewModelConverter.Convert(QSubscription.Question)
这很好用,我只是想知道其他管理方法。
我的第一个问题是,你认为我不让我的领域模型触及我的观点是正确的做法吗?
其次,假设问题 1 为“是”,您会使用相同的方法让转换器执行其他转换器还是在 Controller 中一次执行一个?
【问题讨论】:
-
这可能是一个更适合 Programmers.StackExchange 的问题:programmers.stackexchange.com
-
看看 automapper。这是最快且推荐的方式。
标签: c# asp.net-mvc architecture type-conversion viewmodel