Re: [問題] DAO 模式

看板java作者 (技術時代)時間17年前 (2009/05/26 16:25), 編輯推噓8(802)
留言10則, 5人參與, 最新討論串3/4 (看更多)
噗 謝謝解說= = 我的理解是這樣 有問題糾正我一下 謝謝= = 一個dao介面抽象出所有資料表裡面可能操作的方法 再一個實作dao介面的類別實作出 然後再寫一個user類別封裝該資料表 user表 接著把使用者的參數放該user類別 然後呼叫 實作dao介面方法插user類別 之後從user裡面拿出參數帶入sql語句 從上面看來我只感覺的出來的好處 就是不用在jsp裡面打sql代碼 然後因為有了dao介面 換資料庫只要修改實作dao的方法 好處就以上二點是嗎?? 上面我全都用推的 推dao在做的是什麼 然後怎麼分離而己 其實我不確定是不是這樣做 ※ 引述《adrianshum (Alien)》之銘言: : ※ 引述《etman395 (技術時代)》之銘言: : : 我實在很不了解dao模式 : : 我只知道他的作用好像是不要在jsp裡面寫sql代碼 : : 把他分離出來 : : 這樣jsp就會省掉很多重覆的sql代碼 : : 然後為了換資料庫不會影響前台代碼 : : 所以做個 dao介面 和實作dao的類別 然後再寫個封裝資料表的類別 : : 上面這段我理解的很模糊 : : 其實我dao還是沒有懂.... : : 可以有高手幫我解釋一下嗎?? : : 用白話解釋也可以 : : 因為我也很想解整個構架是怎樣 和實際功能 : DAO 簡而言之, 就是我寫的logic 不用再管 : CRUD 的部份, 把 CRUD 交給一個 DAO. 某程度 : 上, 我的 logic 就不再需要理會背後用什麼 : persistence technology, 以後想比如換用別的 : DB, 只要換別的 DAO Impl 就好了. 感覺上就像: : (Logic): 好, 建好一部車的資料了, DAO, 幫我 : 存好它: : (DAO): 哦 (然後自己默默用 SQL 插入 DB) : 或者 : (Logic): DAO, 幫我拿出所有紅色的車子 : (DAO): 哦 (然後自己默默用 SQL 找出 record, : 把 record 轉為車子) : 諾, 你要的車子 : (Logic): 好! (然後繼續工作) : interface CarDao { : void createCar(Car car); : List<Car> findCarsByColor(Color color); : } : class CarDaoOracleImpl implements CarDao { : // Oracle 的 sql 實作 : } : class CarDaoMySqlImpl implements CarDao { : // My SQL 的 sql 實作 : } : 概念就這樣 : 最重要是 DAO 要把背後 persistence 的 techonlogy : 隱藏起來, 比如看過有些人寫 DAO, return 的是 : resultset, 又或者傳進一句 SQL 來做 query, : 這些就是換湯不換藥的做法, 對架構一點幫助都沒有. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.106.19.33

05/26 16:29, , 1F
未必要提煉出 dao 介面啦... 個人認為 dao 只是一種概念
05/26 16:29, 1F

05/26 16:35, , 2F
系統夠大才需要DAO 否則只是讓程式更複雜罷了!
05/26 16:35, 2F

05/26 16:42, , 3F
最重要是把程式各layer負責的部份清楚分開
05/26 16:42, 3F

05/26 19:07, , 4F
(接樓上) 所以跟系統大不大沒有關係....
05/26 19:07, 4F

05/26 19:07, , 5F
也不會因此變複雜,理論上是變簡單且直覺
05/26 19:07, 5F

05/26 19:31, , 6F
其實就真的只是把db的部份分離出來而已..如果系統很小...
05/26 19:31, 6F

05/26 19:33, , 7F
邏輯的部份就看看要怎麼寫摟~~
05/26 19:33, 7F

05/27 01:41, , 8F
讓程式變得簡潔,不過這樣寫有沒有比較簡單就不知道了
05/27 01:41, 8F

05/27 10:45, , 9F
同意PsMonkey,除非你的程式是又小以後又不會再改
05/27 10:45, 9F

05/27 10:48, , 10F
但我們學習,不是為了要寫以後能 maintain 的程式嗎?
05/27 10:48, 10F
文章代碼(AID): #1A6wTzP7 (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
2
2
完整討論串 (本文為第 3 之 4 篇):
2
2
8
10
文章代碼(AID): #1A6wTzP7 (java)