JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Software Design  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
話題被移動
該話題已被移動 - browser , 2004-12-20 13:05
如果您尚不清楚該話題被移動的原因,請參考論壇規則以及本版公告或者聯系本版版主。
本主題所含的標籤
無標籤
作者 請問DTO跟DAO兩者的關係是什麼?
hahawawa





發文: 50
積分: 0
於 2004-12-20 12:41 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
到處看到DTO跟DAO,但是都沒有明確的定義,因此有此一問...
不勝感激!


reply to postreply to post
作者 Re:請問DTO跟DAO兩者的關係是什麼? [Re:hahawawa]
zanta





發文: 78
積分: 4
於 2004-12-21 00:01 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
DTO:Data Transfer Object
DAO:Data Access Object

由名稱來猜,DTO 就是類似用來作資料傳輸的 Java 類別,個人看過的寫法是寫成有 getter/setter 的 JavaBean
透過 DTO 可以很方便地將資料跨 tier 傳遞,且完整封裝

比如:

Servlet 產生 DTO 物件,將 Client 端輸入的資料透過 setter 寫進 DTO,呼叫企業邏輯處理元件時將 DTO 物件當成參數向後端傳遞

而後端的企業邏輯處理元件就可以透過 DTO 的 getter 取出所需要的資料,並進行運算
若後端運算完畢之後必須要將處理結果傳回 Client 端,也是透過 DTO 的 setter 設定新的值,並回傳給 Servlet

這整個過程當中都只需要 DTO 物件一個參數,像坐捷運一樣從前端一路傳到後端
不需要串一堆參數傳來傳去的,若後端須新增參數時也只需要更改 DTO 及用到相關 getter/setter 的程式碼即可,大部分程式都不需要變動

這樣看起來似乎有點像簡易版的 Struts form bean.... Big Smile

至於 DAO,是跟資料庫存取有關的類別
我看過的做法是將所有操作資料庫的動作都萃取集中起來寫成特定的公用類別
程式中若需要存取資料庫時一律透過 DAO 處理

這樣的好處是,當資料庫更換時,僅需抽換 DAO 即可,其他程式可以繼續使用,可以將應用程式與資料庫的耦合度降低

以上為小弟所看過的部份,若有錯誤或補充還請不吝指教~ 大家一起討論討論 Tongue


reply to postreply to post
作者 Re:請問DTO跟DAO兩者的關係是什麼? [Re:zanta]
jini

SoftLeader Taiwan

版主

發文: 1266
積分: 23
於 2004-12-21 00:59 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
struts formBean is not a DTO.

reply to postreply to post
作者 Re:請問DTO跟DAO兩者的關係是什麼? [Re:zanta]
zanta





發文: 78
積分: 4
於 2004-12-21 10:31 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
zanta wrote:
前略~

這樣看起來似乎有點像簡易版的 Struts form bean.... Big Smile

後刪~


哈哈,自己現在回過頭去看那句話也覺得怪怪的....
當時的想法其實是這樣的

比如現在有一個網頁是需要填帳號跟密碼,這時如果套用 Struts 的話可能會產生一個 ActionForm,
並且有帳號跟密碼兩個欄位和相關的 getter/setter

當程式流程順利執行到 Action 裡的 execute() 方法時,我在 execute() 當中呼叫後端的企業邏輯處理元件,
並且把 User 剛剛輸入的資料傳過去做更細部的檢查或運算...etc

之前的做法是在 execute() 當中 new 出一個 DTO 物件
並且把 form bean 裡所保存的相關資訊一一設定到 DTO 當中,呼叫後端時就把 DTO 物件當成 method 的參數傳過去

我當時的突發奇想就是在這裡:

既然 form bean 跟 DTO 當中可能有部份欄位是相同的 (比如 username, password)
那我如果在 execute() 當中不額外產生 DTO 物件,而是直接把 form bean 物件往後丟呢?

這樣感覺起來,某種程度上也有做到 DTO 的好處,資料可以從 web 端一路傳到 ejb 端
而且當我們要新增欄位時(比如年紀與性別),
這時候我就只需要新增 ActionForm 的欄位就可以滿足前後端欄位的需求
不需要既改了 ActionForm,還必須要在 DTO 裡面新增年紀與性別的欄位

我自己是想到了幾個缺點
第一個就是後端企業邏輯的模組就因此必須要 import Struts 的相關類別才能認識 ActionForm,感覺怪怪的
第二個就是增加了前後端程式的耦合度,維護起來也許沒那麼清楚

不知道我的突發奇想在實作上有沒有可能?
也或許這樣的設計方式並不理想,甚至是會有問題呢?


zanta edited on 2004-12-21 10:36
reply to postreply to post
作者 Re:請問DTO跟DAO兩者的關係是什麼? [Re:zanta]
anthonychen

外線交給我

版主

發文: 2033
積分: 8
於 2004-12-21 11:06 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我覺得問題會在這裡:

zanta wrote:
第二個就是增加了前後端程式的耦合度,維護起來也許沒那麼清楚


商業邏輯一旦變動,勢必會連帶影響 View - Control - Model 的程式運作。
所以除非是小型的商業系統或固定性高的軟體產品,否則還是讓 formbean 及
DTO 各司其職的好。


anthonychen edited on 2005-06-29 16:47
reply to postreply to post
作者 Re:請問DTO跟DAO兩者的關係是什麼? [Re:hahawawa]
hahawawa





發文: 50
積分: 0
於 2004-12-23 08:31 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
各位大大的肺腑之言,在下會用心領悟...謝謝~~~

reply to postreply to post
作者 Re:請問DTO跟DAO兩者的關係是什麼? [Re:hahawawa]
hahawawa





發文: 50
積分: 0
於 2004-12-23 08:36 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我去查詢一些資料,覺得DAO好像就是所謂的DOMAIN DATA TRANSFER OBJECT (是DTO的一種),請問是不是呢?

reply to postreply to post
作者 Re:請問DTO跟DAO兩者的關係是什麼? [Re:hahawawa]
ysho





發文: 28
積分: 0
於 2005-02-18 15:15 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
hahawawa wrote:
我去查詢一些資料,覺得DAO好像就是所謂的DOMAIN DATA TRANSFER OBJECT (是DTO的一種),請問是不是呢?


不對吧!
DAO應該是Data Access Object,一般是呼叫DAO產生DTO(Data Transfer Object)。


reply to postreply to post
作者 Re:請問DTO跟DAO兩者的關係是什麼? [Re:hahawawa]
next





發文: 29
積分: 0
於 2005-08-25 22:01 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
如果 DAO 包的是 ORM (Hibernate , Toplink ...)

DAO 可傳出有 behavior 的 Domain Object

而不是 沒有 behavior 的 DTO (VO)

(如果您想用 比較 Fine-Grained 的寫法)

此外

DAO 也可傳出 花些巧思加工過的 Result Set

可某種程度將 Persistent 到 Business 到 Presentation 的 牽一髮動全身

降至最低


reply to postreply to post
作者 Re:請問DTO跟DAO兩者的關係是什麼? [Re:zanta]
next





發文: 29
積分: 0
於 2005-08-27 18:51 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
zanta wrote:

.... 恕刪

也或許這樣的設計方式並不理想,甚至是會有問題呢?


且讓我們回到比較 形而上的 Layer 觀點

Presentation 可用 Web 或 Rich-Client 來具化

有的系統可能需要二種人機介面並存

即便只需 Web 介面

也難保哪天想抽換為另一個 MVC Framework (像敝人就很想換 Tapestry )

Anyhow

敝人還是建議謹守 Layer 分明 的 Principle

提供給您做個參考

---------------------------------------------------

當然當然

我們可以看到 Spring Framework 的 Sample Application

會在 Layer 之間傳遞 Domain Object (Object with complete behavior)

不過 Spring Framework 的 Sample Application 用了一些 Trick 讓

Domain Object 在 presentation layer 看起來像是 VO (Object with no behavior at all) 一般

---------------------------------------------------

不過不過

Gavin King (GodFather of Hibernate) 在

Hibernate in Action 一書中表示

他不在乎 Domain Object 在 Layer 之間穿梭自如


next edited on 2005-08-27 22:26
reply to postreply to post
作者 Re:請問DTO跟DAO兩者的關係是什麼? [Re:zanta]
next





發文: 29
積分: 0
於 2005-08-27 18:55 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
煩請版主刪掉 這篇 double-post

謝謝

辛苦了


next edited on 2005-08-27 18:59
reply to postreply to post
» JWorld@TW »  Software Design

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8