java 板


LINE

※ 引述《etman395 (技術時代)》之銘言: : 噗 : 謝謝解說= = : 我的理解是這樣 : 有問題糾正我一下 謝謝= = : 一個dao介面抽象出所有資料表裡面可能操作的方法 : 再一個實作dao介面的類別實作出 : 然後再寫一個user類別封裝該資料表 user表 : 接著把使用者的參數放該user類別 : 然後呼叫 實作dao介面方法插user類別 之後從user裡面拿出參數帶入sql語句 : 從上面看來我只感覺的出來的好處 : 就是不用在jsp裡面打sql代碼 : 然後因為有了dao介面 : 換資料庫只要修改實作dao的方法 : 好處就以上二點是嗎?? : 上面我全都用推的 : 推dao在做的是什麼 : 然後怎麼分離而己 : 其實我不確定是不是這樣做 基本上的理解大致是對的,但是少了點什麼。 缺少的是 pattern 互動的角色,以致內心戲的劇本無法完整演譯。 為什麼要有 dao pattern?可以先問自己一個基本的問題。 pattern 是有系統地整理前人開發經驗的結果, 回顧開發歷程,最令人痛苦的是需求「變更」帶來的實作改變。 對於資料庫程式應用更是如此, 簡單如新增一個查詢,您可能只需要多寫一個 SQL 較麻煩如資料庫轉換,可能應擴充的需要 或區分測試、開發環境需要在不同資料庫切換。 SQL 語法間的差異讓您不得不做出些微的改變。 在 jsp 內直接下 SQL 當然是最直接取得資料的方式, 蠻多的入門書也是這樣寫。 實際上,有許多理由您不該那麼寫。 因為 SQL 會散落在 jsp 檔內,當變動產生的時候 您需要一一地去改變多個 jsp 檔內的 SQL 這是未使用 dao 時最大的麻煩。 這裡所指的 dao 並不是嚴格地 dao pattern 規範, 而是一層「間接」的物件,透過它來與實際的資料庫互動 所以使用 <jsp:useBean ... /> 封裝與資料庫的互動行為也是一種 dao 的實現。 這樣的寫法,當變動產生時,您只要改變 Bean 的實作。 ====================================================== http://java.sun.com/blueprints/corej2eepatterns/ Patterns/DataAccessObject.html ( http://tinyurl.com/merh ) 您可以參考一下 figure 9.2 它有幾個角色: 1. BusinessObject 2. DAO 3. DataSource 4. TansferObject 依您理解的描述,您把焦點放在 2, 3, 4 的角色 [2] :: 一個dao介面抽象出所有資料表裡面可能操作的方法 再一個實作dao介面的類別實作出 [4] :: 然後再寫一個user類別封裝該資料表 user表 接著把使用者的參數放該user類別 [2]->[3]->[4] 然後呼叫 實作dao介面方法插user類別 之後從user裡面拿出參數帶入sql語句 ===================================================== 當您忽略角色 [1] 時,只會覺得本來寫的那樣就可以用了 為什麼要再那麼累,生個 dao 出來,又再多個 domain model 放資料 開始懷疑這麼做是不是很彆扭,需要一些背書過的好處加強信心。 BusinessObject 的角色是什麼? 雖然我們借用 Java EE 定義的 DAO作說明, 並非真的需要多一個 Business Layer (Service Layer) 使用 DAO 純化的角色就是 [1] 是 dao 的使用者(client) 在您的例子就是 jsp (view layer)。 在 pattern 應用裡,最爽的就是 client 角色。 在正確使用 pattern 的情況下,受改變影響最小的應該是 client 變動會被被封裝在 pattern 的實作內。 因此,實作 pattern 是一件「爽到 client 甘苦到實作者的事」 不過通常我們不太會享受到容易更換資料庫的好處 因為這件事的成本總是比預想的高。 對 client 來說, 操作資料來源(data source:db、file、ldap、s3) 細節不會到處散落 像是換 JdbcDriver 版本、資料庫連線設定、SQL 語法微調 都只在 DAO 或它的背後做改變。 對 dao 來說, 它可以獨立於 client 實行重構、單元測試。 您不再需要啟動完整的環境(web server + data source + user behavior) 您可以單純以 dao(+data source) + method invoke 單純驗證邏輯 少開一個 web server 與人工觸發 view 測試會省去許多時間。 因為您開的可能是一個怪物級的 web server, 它可能會吃掉許多資源,這就限制了您的開發環境需要「高檔」一些 而省去人工開 jsp page 測試,可以減低肩腕的使用達到保護的效果 當您不再那麼人工地實行開發時, 恭禧!您已經脫離黑手,成為開發者。 多出來的時間可以和 OL 聊天,或是裝忙等下班 :P : ※ 引述《adrianshum (Alien)》之銘言: : : 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: 61.231.55.86 ※ 編輯: qrtt1 來自: 61.231.55.86 (05/30 22:46) ※ 編輯: qrtt1 來自: 61.231.55.86 (05/30 22:47)
1F:推 jini:qrtt1 說得真好 05/31 00:07
2F:推 etman395:寫的真好 我恍然大悟!! 05/31 14:25
※ 編輯: qrtt1 來自: 61.231.55.86 (05/31 16:06)







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP