我已经构建了我的 WebAPI 来为客户端提供 DTO,作为将域模型与客户端模型分离的一种方式。我现在正在开发像 Breeze 这样的客户端技术,我想知道使用 Breeze 会如何影响这种模式,以及它是否是一种非此即彼的场景。如果有的话,什么时候同时使用微风和 DTO 是个好主意?
问问题
286 次
1 回答
0
Breeze 并不真正关心您是要使用 DTO 还是更成熟的域模型“实体”对象。从 .NET 的角度来看,Breeze 可以将其全方位的查询服务应用于任何可以作为 IEnumerable 或 IQueryable 公开的集合。如果您不想使用查询,则可以通过带有参数的 WebApi 方法公开单个 DTO 或 DTO 集合。
您还可以选择使用带有投影的 Breeze 查询从服务器上的实体构造 DTO 对象,并且只使用客户端上的 DTO。
如果查询对您很重要,那么从您的角度来看,DTO 与域模型“实体”的主要问题是您将 DTO 公开为“可查询”对象的难易程度以及这种查询的效率可能有多高。许多 ORM 工具(如实体框架)能够转换查询,以便大部分繁重的处理由数据库引擎执行。与尝试迭代 DTO 集合以执行查询的替代方案相比,此类优化可能非常高效。
一种有趣的替代方法是使用 Entity Framework 和 WebApi 之类的东西来仅公开您希望在客户端上公开的域模型的映射子集。即你使用实体框架为你做你的 DTO 映射。所以你有两个 EF 模型,一个完整的域模型和一个 DTO 域模型。这样做的好处是您仍然可以获得查询优化的优势。
希望这可以帮助。
于 2013-03-27T19:46:01.610 回答