作者etman395 (技術時代)
看板java
標題Re: [問題] DAO 模式
時間Tue May 26 16:25:32 2009
噗
謝謝解說= =
我的理解是這樣
有問題糾正我一下 謝謝= =
一個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
推 PsMonkey:未必要提煉出 dao 介面啦... 個人認為 dao 只是一種概念 05/26 16:29
推 silver8250:系統夠大才需要DAO 否則只是讓程式更複雜罷了! 05/26 16:35
→ adrianshum:最重要是把程式各layer負責的部份清楚分開 05/26 16:42
推 PsMonkey:(接樓上) 所以跟系統大不大沒有關係.... 05/26 19:07
推 PsMonkey:也不會因此變複雜,理論上是變簡單且直覺 05/26 19:07
推 jej:其實就真的只是把db的部份分離出來而已..如果系統很小... 05/26 19:31
→ jej:邏輯的部份就看看要怎麼寫摟~~ 05/26 19:33
推 bala045:讓程式變得簡潔,不過這樣寫有沒有比較簡單就不知道了 05/27 01:41
推 adrianshum:同意PsMonkey,除非你的程式是又小以後又不會再改 05/27 10:45
推 adrianshum:但我們學習,不是為了要寫以後能 maintain 的程式嗎? 05/27 10:48