Entity和DTO之间的关系

1:在调用业务方法时,DTO对象数据是由Action生成(可能是用户输入的Form数据,也可能是其他情况)。为了说的清楚简洁,请允许我举个例子:   用户更新自己的注册信息,例如修改密码之类的操作。  用户提交页面-->ActionForm提取Form数据-->构造并对UserDTO赋值-->调用业务方法changePassword(UserDTOdto)把DTO对象传入业务方法-->业务方法内部把UserDTO转化为Entity User-->调用UserDAO.update(User)-->DAO调用hibernate进行持久化操作 2:我理解dto是做表示层(展示给用户)的,而实体是数据对象(表)。表示层dto的是由多个实体构成,或一个实体的一个部分,或多个实体的各个部分的结合体?如果你认为dto没有必要,难道你做数据库的时候,表与页面的展示是一摸一样的吗?不太现实吧。   dto是面向对象的,实体是面向关系数据库的;hibernate不正是要解决面向对象跟面向关系的冲突吗? 3:DTO data transfer object  数据传输对象 这个对象封装你需要传输的数据 在M,V,C这三个层传递 formbean就是一个dto 在V,C两着层之间传递数据 4:   dto其实就是简单的JAVABEAN,实现Serializable接口,可以在网络间传输 dto是为了解决entity bean可能很庞大,影响网络传输性能而产生的一种想法 比如entity bean印射到一个表字段很多,但实际使用中可能只要取得几个值,比如ID等什么的,那么就定义一个class(类) getID() { }之类的,这个class在服务器端,调用entity的local接口,或直接用jdbc操作表,所以不会对网络传输产生不利,然后网络传输这个class给客户端(可序列化),是不是减小了网络传输。 你说的没错,,其实你说的dto,就是Value Object。 作用,主要是减少setXXX()/getXX()的调用,一次性全部用一个valueobject传递回来。就是这个作用   注释:

Serializable接口的意义和用法

在实体类中引用了serializable这个接口,如下:  
  1.   import java.io.Serializable;
  2.    
  3.   public class Admin implements Serializable {
  4.   }
  5.    
百度上是这么讲的: Serializable接口是启用其序列化功能的接口。实现java.io.Serializable 接口的类是可序列化的。没有实现此接口的类将不能使它们的任意状态被序列化或逆序列化。 这个介绍非常的不接地气,于是我与去看了几篇博客,有一个小姐姐的博客引起了我的注意,她是这样理解的:     序列化的过程,就是一个“freeze”的过程,它将一个对象freeze(冷冻)住,然后进行存储,等到再次需要的时候,再将这个对象de-freeze就可以立即使用。     我们以为的没有进行序列化,其实是在声明的各个不同变量的时候,由具体的数据类型帮助我们实现了序列化操作。     如果有人打开过Serializable接口的源码,就会发现,这个接口其实是个空接口,那么这个序列化操作,到底是由谁去实现了呢?其实,看一下接口的注释说明就知道,当我们让实体类实现Serializable接口时,其实是在告诉JVM此类可被序列化,可被默认的序列化机制序列化。  

为什么需要序列化

1,存储对象在存储介质中,以便在下次使用的时候,可以很快捷的重建一个副本。也就是When the resulting series of bits is reread according to the serialization format, it can be used to create a semantically identical clone of the original object. 问题:我没有实现序列化的时候,我一样可以存入到我的sqlserver或者MySQL、Oracle数据库中啊,为什么一定要序列化才能存储呢???? 2,便于数据传输,尤其是在远程调用的时候!   其实说了这么多,想表达的意思就是:

 

Serializable接口是一个里面什么都没有的接口 它的源代码是public interface Serializable{},即什么都没有。     如果一个接口里面什么内容都没有,那么这个接口是一个标识接口,比如,一个学生遇到一个问题,排错排了几天也没解决,此时,她举手了(示意我去帮他解决),然后我过去,帮他解决了,那么这个举手其实就是一个标识,自己不能解决的问题标示我去帮他解决,在Java中的这个Serializable接口是给JVM看的,告诉JVM,我不做这个类的序列化了,你(JVM)给我序列化,序列化就是变成二进制流,比如云计算、Hadoop,特别是Hadoop完全就是分布式环境,那么就要涉及到对象要在网络中传输,里面的全是二进制流,当然你来做这个序列化操作也可以,但是这个类里面可能还有一个类,如果你把外面的类对象Person变成二进制,那么里面也要序列化(这要用到深度遍历,很麻烦),干脆告诉JVM,让他来帮你做。   serializable接口就是Java提供用来进行高效率的异地共享实例对象的机制,实现这个接口即可。
上一篇:[C++] C++标准中定义的实体(entity)/ 声明 / 定义


下一篇:.netcore下EF model没有NotMapped