您能简单解释一下传输对象和域对象的区别吗?如果您能举一个Java示例,那就太好了。
您能简单解释一下传输对象和域对象的区别吗?如果您能举一个Java示例,那就太好了。
如果使用贫血数据模型(即您的域对象没有任何逻辑),DTO和域对象可以是同一个对象。
数据传输对象(DTO)用于在应用程序的不同部分(如不同层或不同应用程序)之间交换数据。
领域对象(DO)(以及它们派生自的类)实现业务逻辑,因此它们仅位于业务逻辑层/领域中(即使术语不同,本质含义相同)。
由于DO实现了业务逻辑,因此它们可能会非常复杂,并且可以包括方法、事件等。
关于DTO的另一个要点
根据Martin Fowler的观点,DTO是几个对象的组合(大多数人通常将每个对象称为DTO);理由是,在某些情况下,将更大的数据包较少地发送(而不是“喋喋不休”地跨越网络发送许多小数据包)会更经济。所以对于大多数人来说,DTO是如我在答案开头定义的那样(或类似于此)。
总之,DTO是用于不同组件或应用程序之间交换数据的愚笨数据结构。而DO则实现了业务逻辑,因此可能更加复杂。
由于传输对象的使用性质,它们通常是可序列化的。如果调用是远程的并且在 JVM 之间进行,或者它们将以促进序列化的方式使用,例如有状态会话 bean,则这尤为重要。出于这个目的,传输对象必须易受到这种“处理”的影响,即传输对象实现可序列化。
相反地,领域对象可能包含行为,但 DTO 仅是一种传输媒介。
从业务角度来看,领域对象是活动的参与者或主体,具有整个领域和流程,DTO是数据对象,不同于数据bean,它忠实地反映数据库对象(特别是在ORM架构中)。 DTO可以具有数据聚合、转换、组合等功能,以满足表示或某些数据操作需求,它没有主题,但领域对象根据其领域级别定义具有主题。