asp.net-mvc-3 – DTO可以嵌套DTO吗?
|
我有以下域模型: public class Playlist
{
public long Id { get; set; }
public string Title { get; set; }
public virtual ICollection<Song> Songs { get; set; }
}
public class Song
{
public long Id { get; set; }
public string Name { get; set; }
public virtual Playlist Playlist { get; set; }
public virtual ICollection<Catalog> Matches { get; set; }
}
public class Catalog
{
public long Id { get; set; }
public string Title { get; set; }
}
我的服务有以下代码: public PlaylistResult FindByPlaylistId(long id)
{
Playlist playlist = playlistRepository.GetById(id);
foreach (var song in playlist.Songs)
{
song.Matches = catalogRepository.GetMatches(song.Name).ToList();
}
return new PlaylistResult(new PlaylistDTO(playlist),playlist.Songs.Select(x => new SongDTO(x)));
}
我的服务从数据库中获取播放列表和歌曲,然后对于播放列表中的每首歌曲,它会触发查询以从该歌曲特定的数据库(使用SQL Server全文搜索)获取其他匹配. 然后将数据转换为DTO,添加到结果对象并传递回控制器.代码如下: public class PlaylistResult
{
public PlaylistResult(PlaylistDTO playlist,IEnumerable<SongDTO> songs)
{
Playlist = playlist;
Songs = songs;
}
public PlaylistDTO Playlist { get; private set; }
public IEnumerable<SongDTO> Songs { get; private set; }
}
问题: 到目前为止,PlaylistResult对象运行良好,但最近引入的匹配使事情变得复杂一些.看起来我别无选择,只能修改我的SongDTO以考虑匹配,看起来像这样: public class SongDTO
{
public SongDTO(Song song,IEnumerable<CatalogDTO> matches)
{
Id = song.Id;
Name = song.Name;
Matches = matches;
}
public long Id { get; private set; }
public string Name { get; private set; }
public IEnumerable<CatalogDTO> Matches { get; private set; }
}
但这不违反DTO的目的吗?据我所知,DTO是数据的扁平化表示,并且这种方法不是扁平化的.另一方面,我不知道如何做到这一点,因为每场比赛都是针对每首歌的. 我知道我可以让自己更容易,扔出DTO并直接将域模型传递给控制器并将其称为一天.但我不想这样做,因为整个目的是学习如何使用DTO. 非常感谢任何输入. 解决方法DTO不是数据的平面表示,尽管它们可以.这就是它们的美妙之处 – 您可以根据需要构建它们,而不是数据库如何定义事物.它们也是从行为中分离数据的一种手段. 我根本不会在DTO中引用Domain对象. (你在构造函数中有它)使用工厂来构建DTO,这样你的客户只需要引用DTO而不是Domain对象. Song mySong; SongDTO = DTOFactory.GetSong(mySong); 如果您的客户需要引用Domain对象,那么他们也可以使用它们! (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何增加IIS 7.0上的线程池线程
- ASP.NET UpdatePanel和Javascript __dopostback
- 在ASP.NET中如何检测上传文件的MIME类型?
- asp.net – Dapper.net交易问题
- asp.net-core – asp.net核心身份中的多个SubDomain的cooki
- asp.net-mvc – ModelState.AddModelError未显示任何消息
- asp.net-mvc – ASP.NET MVC:用户控制的好替换?
- 如何指导获取一个经典的asp应用程序在IIS 7.0下工作
- ASP.NET MVC捆绑缓存. (检测css文件更改)(内部行为)
- asp.net-mvc – 模型支持DB上下文已更改;考虑代码优先迁移
- 写入ASP.NET中的日志文件
- 在ASP.NET MVC中模拟User.Identity
- asp.net-mvc – ASP.NET MVC读取原始JSON信息数据
- asp.net-mvc – 如何从MVC控制器返回Json对象到视
- asp.net-mvc – OwinStartup没有开始…为什么?
- asp.net-mvc – 重定向页面的TempData?
- asp.net-core – dotnet publish不会发布正确的a
- asp.net gridview中的datetime格式
- asp.net-mvc – 使用没有ORM的ASP.NET MVC
- asp.net – 在PreRender上添加控件页面
