作者adrianshum (Alien)
看板java
標題Re: [問題] DAO 模式
時間Tue May 26 15:39:45 2009
※ 引述《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: 202.155.236.82
推 PsMonkey:傳一個 sql 作 query,強者!! 05/26 16:01
推 silver8250:推一個 這對話很生動~ 05/26 16:18