簡體   English   中英

AutoMapper最佳實踐 - 我是否應該向DAO詢問有關實現從DTO到域對象的映射的信息?

[英]AutoMapper best practices - Should I be asking the DAO for information to fulfill mapping from DTO to domain object?

/// <summary>
///     Initialize the AutoMapper mappings for the solution.
///     http://automapper.codeplex.com/
/// </summary>
public static void CreateAutoMapperMaps()
{
    IDaoFactory daoFactory = DependencyResolver.Current.GetService<IDaoFactory>();

    Mapper.CreateMap<Error, ErrorDto>()
            .ReverseMap();

    IPlaylistDao playlistDao = daoFactory.GetPlaylistDao();
    IUserDao userDao = daoFactory.GetUserDao();

    Mapper.CreateMap<Playlist, PlaylistDto>();
    Mapper.CreateMap<PlaylistDto, Playlist>()
            .ForMember(playlist => playlist.User, opt => opt.MapFrom(playlistDto => userDao.Get(playlistDto.UserId)));

    Mapper.CreateMap<PlaylistItem, PlaylistItemDto>();
    Mapper.CreateMap<PlaylistItemDto, PlaylistItem>()
            .ForMember(playlistItem => playlistItem.Playlist,
                        opt => opt.MapFrom(playlistItemDto => playlistDao.Get(playlistItemDto.PlaylistId)));

    Mapper.CreateMap<ShareCode, ShareCodeDto>().ReverseMap();

    Mapper.CreateMap<User, UserDto>().ReverseMap();
    Mapper.CreateMap<Video, VideoDto>().ReverseMap();

    Mapper.AssertConfigurationIsValid();
}

一位朋友告訴我,AutoMapper依靠DAO實現從DTO到域的映射是不好的做法。

我不明白為什么這是不好的做法,我也不明白如何用null引用有效地處理我的域對象。

誰能解釋一下? 謝謝

這主要是基於我的經驗和閱讀的觀點。 其他人可能不同意。 如果您堅持與其他層進行嚴格的域實體分離,那么使用AutoMapper 填充您的域實體(DE)將被視為錯誤。 嚴格的DE設計通常不會以可設置的形式公開其屬性。 您的實體將謹慎地控制數據的設置方式,並通過仔細驗證,在允許輸入成為實體的一部分之前對輸入進行審核。 通常,這只是采用公開提供方法的形式。 我覺得這對於關鍵系統和非常復雜的業務邏輯來說是一種有用的模式。

我在上述模型中遇到的問題是,在許多情況下,它是過度的,會導致域數據的副本太多。 您真的想要將從數據源加載的DTO映射到您的DE,然后將您的DE中的另一個DTO映射到您的視圖嗎? 痛苦,有更多的蟲子空間。

對於更小,更簡單的系統,我認為使用良好的ORM解決方案將DE映射到數據存儲更有意義,使用洋蔥架構來管理依賴關系,並根據需要將DE映射到視圖模型。 這是AutoMapper非常有用的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM