【发布时间】:2014-04-21 15:54:43
【问题描述】:
在我的 N 层 DDD 架构中,我在应用层中的所有 ViewModel 类都实现了以下接口:
public interface IViewModel
{
ModelEntitySuperType ToModel();
}
所以每个ViewModel 都知道如何映射回Domain Object(通过实现ToModel() 方法)。
[更新]
另外我在我的应用层使用了CQRS模式,所以我定义了下面的通用抽象类来实现Update命令,你可以在下面的类中看到ToModel()方法的用法(Handle方法):
public abstract class UpdateCommandHandler<TCommandParameter, TViewModel, TEntity> : ICommandHandler<TCommandParameter>
where TCommandParameter : UpdateCommandParameter<TViewModel>
where TViewModel : class, IViewModel, new()
where TEntity : ModelEntitySuperType, IAggregateRoot, new()
{
private readonly IRepository<TEntity> _repository;
public string Code { get; set; }
protected UpdateCommandHandler(IRepository<TEntity> repository, string commandCode)
{
Code = commandCode;
_repository = repository;
}
public void Handle(TCommandParameter commandParameter)
{
var viewModel = commandParameter.ViewModelEntity;
var entity = viewModel.ToModel() as TEntity;
_repository.Update(entity);
}
}
将映射逻辑放入ViewModel 对象是正确的方法吗?
实现这一目标的更好方法是什么?
【问题讨论】: