什么时候同时使用DTO和Breeze比较好?

什么时候同时使用DTO和Breeze比较好?,breeze,single-page-application,Breeze,Single Page Application,我已经构建了WebAPI,将DTO作为一种将域模型与客户端模型分离的方法提供给客户端。我现在正在研究客户端技术,比如Breeze,我想知道使用Breeze会如何影响这种模式,以及它是否是一种非此即彼的场景。什么时候同时使用breeze和DTO是个好主意 Breeze并不真正关心您是想使用DTO还是更成熟的域模型“实体”对象。从.NET的角度来看,Breeze可以将其全部查询服务应用于任何可以公开为IEnumerable或IQueryable的集合。如果不想使用查询,可以通过采用参数的WebApi

我已经构建了WebAPI,将DTO作为一种将域模型与客户端模型分离的方法提供给客户端。我现在正在研究客户端技术,比如Breeze,我想知道使用Breeze会如何影响这种模式,以及它是否是一种非此即彼的场景。什么时候同时使用breeze和DTO是个好主意

Breeze并不真正关心您是想使用DTO还是更成熟的域模型“实体”对象。从.NET的角度来看,Breeze可以将其全部查询服务应用于任何可以公开为IEnumerable或IQueryable的集合。如果不想使用查询,可以通过采用参数的WebApi方法公开单个DTO或DTO集合

您还可以选择使用带投影的Breeze查询从服务器上的实体构造DTO对象,并且只使用客户端上的DTO

如果查询对您很重要,那么从您的角度来看,DTO的vs域模型“实体”的主要问题是您将DTO公开为“可查询”对象有多容易,以及此查询的效率有多高。许多ORM工具,如EntityFramework,都能够转换查询,以便大部分繁重的处理由数据库引擎执行。与尝试迭代DTO集合以执行查询的备选方案相比,这种优化的性能非常好

一个有趣的替代方法是使用实体框架和WebApi之类的工具,仅公开您希望在客户端公开的域模型的映射子集。i、 e.您使用实体框架为您进行DTO映射。所以您有两个EF模型,一个全域模型和一个DTO域模型。这样做的好处是,您仍然可以获得查询优化的好处


希望这有帮助。

谢谢Jay。现在,我的项目使用EF和WebAPI来公开我手动映射的DTO——对于每个实体,我有一个瘦(无子对象)和厚(有子对象)DTO,其中包含toEntity和ToToTo方法。你会不会考虑像微风这样的库,只会查询一个DTO/模型来获取需要的东西?我不确定我是否理解这个问题,但是一个微风查询可以返回一个完整的对象图。i、 e.父母和您选择的子女的集合。