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提供用來進行高效率的異地共享實例對象的機制,實現這個接口即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM