AutoMapper最佳实践 – 我是否应该向DAO询问有关实现从DTO到域对象的映射的信息?

///  /// Initialize the AutoMapper mappings for the solution. /// http://automapper.codeplex.com/ ///  public static void CreateAutoMapperMaps() { IDaoFactory daoFactory = DependencyResolver.Current.GetService(); Mapper.CreateMap() .ReverseMap(); IPlaylistDao playlistDao = daoFactory.GetPlaylistDao(); IUserDao userDao = daoFactory.GetUserDao(); Mapper.CreateMap(); Mapper.CreateMap() .ForMember(playlist => playlist.User, opt => opt.MapFrom(playlistDto => userDao.Get(playlistDto.UserId))); Mapper.CreateMap(); Mapper.CreateMap() .ForMember(playlistItem => playlistItem.Playlist, opt => opt.MapFrom(playlistItemDto => playlistDao.Get(playlistItemDto.PlaylistId))); Mapper.CreateMap().ReverseMap(); Mapper.CreateMap().ReverseMap(); Mapper.CreateMap 

一位朋友告诉我,AutoMapper依靠DAO实现从DTO到域的映射是不好的做法。

我不明白为什么这是不好的做法,我也不明白如何使用空引用有效地处理我的域对象。

谁有人解释一下? 谢谢

这主要是基于我的经验和阅读的观点。 其他人可能不同意。 如果您坚持与其他层进行严格的域实体分离,那么使用AutoMapper 填充您的域实体(DE)将被视为错误。 严格的DE设计通常不会以可设置的forms公开其属性。 您的实体将谨慎地控制数据的设置方式,并仔细validation,在允许输入成为实体的一部分之前审核输入。 通常,这种forms只是公开提供方法。 我觉得这对于关键系统和非常复杂的业务逻辑来说是一种有用的模式。

我在上述模型中遇到的问题是,在许多情况下,它是过度的,会导致域数据的副本太多。 您真的想要将从数据源加载的DTO映射到您的DE,然后将您的DE中的另一个DTO映射到您的视图吗? 痛苦,有更多的虫子空间。

对于更小,更简单的系统,我认为使用良好的ORM解决方案将DE映射到数据存储更为有意义,使用洋葱架构来管理依赖关系,并根据需要将DE映射到视图模型。 这是AutoMapper非常有用的地方。