作者love112302 (小黑炭)
看板java
标题[问题] 想请问写log到资料库的方法
时间Sat Jan 31 21:32:42 2015
各位好
今天在加班的时候遇到一个问题不知道该怎麽解决比较好
我在做一个简单的CRUD的介面
然後我想要把 修改前 跟 修改後的资讯存起来(log?)
我用DAO的方式操作
public interface TargetDAO{
public add(Target target);
public update(Target target);
public del(Target targeget);
}
public interface LogDAO {
public add(Log log);
}
类似这样,我的资料库设计的table很简单
<Log>
================================
id, editTarget, sqlstmt, sqlwkt, timestamp
<Target>
=================================
id, name, geom, note
如果我要修改一个target, 我会这样写
TargetDAO target = new TargetDAOImpl();
targte.update(target);
请问在这种情况下,log的 DAO 应该要在何时使用呢?
如果是写在 target.update 的底下,
现在是把 log 写在 TargetDAOImpl 底下
但是这样怎麽想怎麽蠢...
想请问如果我要 LOG CRUD 的东西
应该要把 LogDAO 写在那边比较好 QQ?
--
推 vividly0318:您觉得是真的还是豪小的 12/26 18:23
推 presidentbbb:五楼有经验 他最懂 12/26 18:23
推 payme:盖 12/26 18:24
推 inchor:盖 12/26 18:25
推 MaYingGio:五楼勃起都有困难了 还抽插勒 12/26 18:25
推 rappig:MaYingGio:五楼勃起都有困难了 还抽插勒 12/26 18:26
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.137.35.158
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1422711165.A.65E.html
1F:→ ssccg: log是你DAO的api吗? 是实作细节当然在Impl底下啊 01/31 22:07
2F:→ ssccg: 如果还需要把log切出来,你该看看AOP 01/31 22:08
LogDAO 跟 LogDAOImpl 都是我自己写的 interface, class
我不知道该在那边使用他才是正确的写法
如果我在 TargetDAOImpl 里面使用他就会变成这样
public TargetDAOImpl implements TargetDAO {
@overide
public update(Target target){
LogDAO log = new LogDAOImpl();
Log log = new Log();
String sql = "...";
log.setUpdateSql(sql);
doUpdate();
log.addLog(log);
}
变成这样...
个人觉得十分诡异阿.... 怎麽会在 DAOImpl 里面在去呼叫另外一个 DAO
自己又是非科班出身,很多地方不懂,所以来询问各位的意见
我今天会看看 AOP 这个东西
非常感激!
3F:推 force416: 用aop比较方便,不用动到原本的程式码。 01/31 22:41
※ 编辑: love112302 (111.83.122.122), 01/31/2015 23:27:08
4F:→ yyc1217: 如果是用Hibernate的话 可以用它的Interceptor 02/01 00:47
5F:→ ssccg: 因为log不该是个DAO,是log里面存log的方式会用logDAO 02/01 00:59
6F:→ ssccg: 当然如果你的log不是通用功能,只是各DAO的CRUD会用到的一 02/01 01:12
7F:→ ssccg: 个额外insert方法,那直接写个BaseDAO来放就好 02/01 01:13