作者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
1F:推 PsMonkey:未必要提炼出 dao 介面啦... 个人认为 dao 只是一种概念 05/26 16:29
2F:推 silver8250:系统够大才需要DAO 否则只是让程式更复杂罢了! 05/26 16:35
3F:→ adrianshum:最重要是把程式各layer负责的部份清楚分开 05/26 16:42
4F:推 PsMonkey:(接楼上) 所以跟系统大不大没有关系.... 05/26 19:07
5F:推 PsMonkey:也不会因此变复杂,理论上是变简单且直觉 05/26 19:07
6F:推 jej:其实就真的只是把db的部份分离出来而已..如果系统很小... 05/26 19:31
7F:→ jej:逻辑的部份就看看要怎麽写搂~~ 05/26 19:33
8F:推 bala045:让程式变得简洁,不过这样写有没有比较简单就不知道了 05/27 01:41
9F:推 adrianshum:同意PsMonkey,除非你的程式是又小以後又不会再改 05/27 10:45
10F:推 adrianshum:但我们学习,不是为了要写以後能 maintain 的程式吗? 05/27 10:48