标签: data-transfer-objects

什么是数据传输对象?

什么是数据传输对象?

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

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

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

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

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

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

java ejb anti-patterns data-transfer-objects dto

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

为什么要将我的域实体与表示层隔离?

域驱动设计的一部分似乎没有太多细节,是您应该如何以及为什么要将域模型与界面隔离开来.我试图说服我的同事,这是一个很好的做法,但我似乎没有取得多大进展......

他们在演示文稿和界面层中随意使用域实体.当我向他们争辩说他们应该使用显示模型或DTO来将Domain层与接口层隔离时,他们反驳说他们在做类似的事情时看不到业务价值,因为现在你有一个UI对象要维护以及原始域对象.

所以我正在寻找一些可以用来支持它的具体原因.特别:

  1. 我们为什么不在表示层中使用域对象?
    (如果答案是明显的,'脱钩',那么请解释为什么这在这方面很重要)
  2. 我们应该使用其他对象或构造来将我们的域对象与接口隔离吗?

architecture design-patterns domain-driven-design data-transfer-objects presentation-layer

83
推荐指数
5
解决办法
1万
查看次数

视图层中的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万
查看次数

Java数据传输对象命名约定?

在这种情况下,您有一个客户端库传递给API的"传输对象"(POJO只有getter/setter),命名传输对象的最佳方法是什么?

package com.x.core; 

public class Car {
        private String make;
        private String model;

        public Car(com.x.clientapi.Car car) {
             this.make = car.getMake();
             this.model = car.getModel();
        }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,您的主类和传输对象都具有名称Car.它们在不同的包装中,但我认为使用相同的名称令人困惑.有关如何命名传输对象的最佳实践吗?

java naming-conventions data-transfer-objects

47
推荐指数
3
解决办法
4万
查看次数

Transfer对象和Domain对象之间的区别

能否用简单的术语解释Transfer对象和Domain对象之间的区别?如果你能给出一个Java例子,那就太棒了..

java architecture data-transfer-objects domain-object

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

什么是在hibernate实体和数据传输对象之间进行转换的好模式?

我有类似的问题和关注如何在Web服务返回的Hibernate实体和数据传输对象之间进行转换,如本问题所述:

在ejb3中使用数据传输对象被认为是最佳实践

这里提到的一个因素是,如果域模型发生变化,一组DTO将在Web服务的情况下保护消费者.

即使它似乎会为我的项目添加大量代码,但这种推理似乎是合理的.

有没有一个好的设计模式可以用来将Hibernate实体(实现接口)转换为实现相同接口的DTO?

因此,假设以下两个实现'Book',我需要将BookEntity.class转换为BookDTO.class,以便我可以让JAXB序列化并返回.

同样,这整个前景对我来说似乎都很可疑,但如果有很好的模式来帮助处理这种转换,我很乐意获得一些见解.

是否有一些有趣的方式通过反射转换?还是一个我没想过的"建设者"模式?

我应该忽略DTO模式并传递实体吗?

java entity design-patterns hibernate data-transfer-objects

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

为什么传输对象需要实现Serializable?

我今天意识到我已经盲目地按照这个要求多年没有真正问过为什么.今天,我遇到了一个N​​otSerializableException和我从头开始创建的模型对象,我意识到足够了.

我被告知这是因为负载均衡服务器之间的会话复制,但我知道我在会话范围内看到了其他没有实现Serializable的对象.这是真正的原因吗?

java serialization data-transfer-objects

14
推荐指数
2
解决办法
9010
查看次数

Value对象应包含多少业务逻辑?

我尊重的一位导师认为,简单的bean浪费时间 - 值对象"必须"包含一些有用的业务逻辑.

另一个人说这样的代码难以维护,并且所有业务逻辑都必须外部化.

我意识到这个问题是主观的.无论如何要求 - 想从更多角度了解答案.

java oop data-transfer-objects

12
推荐指数
3
解决办法
7898
查看次数

什么是DTO和BO?有什么不同?

我知道DTO是一个数据传输对象,BO是一个业务对象.但是,它究竟意味着什么?我什么时候应该选择其中一个?从我的理解DTO仅用于传输数据而没有业务逻辑.这是否意味着DTO没有任何方法属性(getter和setter)?但是,它仍然具有BO的属性.有人可以解释一下吗?谢谢.

business-objects data-transfer-objects

12
推荐指数
1
解决办法
1万
查看次数