标签: dto

546
推荐指数
6
解决办法
43万
查看次数

普通的旧CLR对象与数据传输对象

POCO =普通旧CLR(或更好:类)对象

DTO =数据传输对象

在这篇文章中有一点不同,但坦率地说,我读到的大多数博客都以DTO的定义方式描述了POCO:DTO是用于在应用程序层之间移动数据的简单数据容器.

POCO和DTO是一回事吗?

.net c# poco dto

393
推荐指数
6
解决办法
14万
查看次数

用于java对象到对象映射的任何工具?

我正在尝试使用java将DO转换为DTO并在开始编写自己的工具之前寻找自动化工具.我只是想知道是否有相同的免费工具.

java mapping dto

224
推荐指数
6
解决办法
15万
查看次数

什么是数据传输对象?

什么是数据传输对象?

在MVC中是模型类DTO,如果没有,有什么不同,我们是否需要两者?

architecture model-view-controller data-transfer data-transfer-objects dto

186
推荐指数
9
解决办法
14万
查看次数

REST API - DTO或不是?

我目前正在为一个项目创建一个REST-API,并且正在阅读关于最佳实践的文章.许多人似乎反对DTO,只是暴露域模型,而其他人似乎认为DTO(或用户模型或任何你想称之为的)是不好的做法.就个人而言,我认为这篇文章很有意义.

但是,我也理解DTO的缺点,包括所有额外的映射代码,可能与其DTO对应物100%相同的域模型等等.

我们的API主要是为了让其他客户端可以使用数据而创建的,但是如果我们做得对,我们也希望尽可能将它用于我们自己的Web GUI.

问题是我们可能不希望将所有域数据公开给其他客户端用户.大部分数据只在我们自己的Web应用程序中才有意义.此外,我们可能不希望在所有方案中公开有关对象的所有数据,尤其是与其他对象的关系等.例如,如果我们公开特定对象的列表,我们不一定要暴露整个对象层次结构; 这样对象的孩子就不会暴露,但可以通过链接(hateoas)发现.

我该如何解决这个问题?我正在考虑在我们的域模型上使用Jackson mixins来控制在给定不同场景的情况下会暴露哪些数据.或者我们应该一直使用DTO - 即使考虑到它的缺点和争议?

java rest spring dto hateoas

133
推荐指数
4
解决办法
6万
查看次数

为什么数据传输对象(DTO)是反模式?

我最近听到人们说数据传输对象(DTO)是一种反模式.

为什么?有哪些替代方案?

java ejb anti-patterns data-transfer-objects dto

125
推荐指数
9
解决办法
5万
查看次数

DTO = ViewModel?

我正在使用NHibernate来保存我的域对象.为了简单起见,我将ASP.NET MVC项目用作表示层和服务层.

我想从我的控制器类返回XML中的域对象.在Stack Overflow上阅读了一些帖子后,我收集DTO是可行的方法.但是,我也遇到过有关ViewModel的帖子.

我的问题:数据传输对象和ViewModels是一样的吗?或者ViewModel是DTO的一种子模式?

asp.net-mvc domain-driven-design dto viewmodel

98
推荐指数
6
解决办法
4万
查看次数

将DTO映射到域对象的最佳实践?

我已经看到很多关于将DTO映射到Domain Objects的问题,但我觉得他们没有回答我的问题.我之前使用过很多方法并有自己的看法,但我正在寻找一些更具体的东西.

情况:

我们有很多域对象.我们使用CSLA模型,因此我们的域对象可能非常复杂,并且包含自己的数据访问.你不想在线上传递这些.我们将编写一些新服务,以多种格式(.Net,JSON等)返回数据.出于这个(以及其他原因),我们还创建了一个精简的数据传输对象,以便在线路上传递.

我的问题是如何连接DTO和Domain对象?

我的第一反应是使用Fowler,DTO模式类型的解决方案.我已经多次看过这件事了,对我来说感觉很对.域对象不包含对DTO的引用.调用外部实体("映射器"或"汇编器")以从域对象创建DTO.通常在域对象端有一个ORM.这样做的缺点是"映射器"在任何真实情况下都会变得非常复杂,并且可能非常脆弱.

提出的另一个想法是域对象"包含"DTO,因为它只是一个精益数据对象.域对象属性将在内部引用DTO属性,如果需要,可以返回DTO.我可以看到没有问题,但感觉不对.我看过一些使用NHibernate的人似乎使用这种方法的文章.

还有其他方法吗?以上是值得使用的方式之一吗?如果是,如果没有,为什么?

感谢您提前了解任何信息.

.net asp.net design-patterns dto

72
推荐指数
4
解决办法
5万
查看次数

MVC模型对象,域对象和DTO之间有什么区别

MVC模型对象,域对象和DTO之间有什么区别?

我的理解是:

MVC模型对象:

为相应视图显示的数据建模.它可能不直接映射到域对象,即可能包括来自一个或多个域对象的数据.

  1. 客户端
  2. 可能包含业务逻辑.例如.验证,计算属性等
  3. 没有持久性相关的方法

域对象:

用于对问题域中的现实世界对象进行建模的对象,如预留,客户,订单等.用于保存数据.

  1. 服务器端
  2. 没有业务逻辑

DTO(数据传输对象):

当层处于单独的进程中时,用于在层之间传输数据的对象,例如从DB到客户端应用程序.在获取与多个域对象相对应的数据时,允许跨线的单个事务而不是多个调用.DTO仅包含数据和访问器方法,并且不存在逻辑.该数据用于特定的DB事务,因此它可以或可以不直接映射到域对象,因为它可以包括来自一个或多个域对象的数据.

  1. 在层之间传递时,在服务器端和客户端使用
  2. 没有业务逻辑
  3. 没有持久性相关的方法

所以,问题:

  1. 以上理解是否正确?我错过了一些关键点吗?

  2. 是否有任何理由不使用Domain对象作为MVC模型,假设Model对象不需要额外的业务逻辑?

  3. 是否有任何理由不使用DTO作为MVC模型,假设Model对象不需要额外的业务逻辑?

architecture model-view-controller model dto

62
推荐指数
6
解决办法
2万
查看次数

视图层中的DTO或域模型对象?

我知道这可能是一个古老的问题,但更好的做法是什么?在应用程序的所有层中使用域模型对象,甚至在JSP上直接将值绑定到它们(我使用的是JSF).或者将域模型对象转换为DAO或服务层中的DTO,并将轻量级DTO发送到表示层.

我被告知使用DTO是没有意义的,因为对数据库的更改将导致所有DTO的更改,而在任何地方使用模型对象只需要更改受影响的模型对象.然而,DTO的易用性和轻量级特性似乎超过了这一点.

我应该注意我的应用程序使用Hibernate模型对象并使用自己的自定义创建的模型对象(意味着没有绑定到任何数据库会话,总是分离).以上任一方案对严格的模型对象模式更有利吗?对于像Lazy Initialization Exceptions这样的事情,使用Hibernate是一个巨大的PITA.

我正在编辑这个问题,希望能够进一步讨论(不确定我是否正确行事):

我对模型对象的问题在于它们根本不灵活.下面的评论说应该设计应用程序,以便可以在所有层中使用模型对象.为什么?如果用户想要一个荒谬的功能,我应该告诉他们,"好吧,这对模型对象不起作用"?

简单而简单,有时候模型对象不起作用.你可能有:

public class Teacher {
    List<Student> students;
    [tons of other Teacher-related fields]
}
public class Student {
    double gpa;
   [tons of other Student-related fields]
}
Run Code Online (Sandbox Code Playgroud)

但也许你不需要所有这些信息.您只需要教师的姓氏,他们今年教授的学生人数,以及所有学生的平均GPA.在那种情况下你会做什么?检索完整的教师信息和学生关系,然后您的代码计入学生列表,然后计算内部所有gpas的总平均值?这似乎比简单地使用'String lastName','int numStudents'和'double combinedGpa'创建DTO更加努力;

听起来好像我已经考虑到了这些,但我还没有在一个应用程序中工作,在这个应用程序中,模型对象可以在每个实例中完全使用.具有不同寻常的用户需求的常规实际应用程序不能以这种方式工作.

model data-transfer-objects dto

49
推荐指数
3
解决办法
2万
查看次数