首页 新闻 会员 周边 捐助

非框架 DAO层 update如何设计?

0
悬赏园豆:50 [已解决问题] 解决于 2014-06-09 18:01

信访letter表结构
id title cotent replay views flag
标识 题目 内容 回复 浏览次数 审核状态

有如下操作
1.记录新信件              insert id title content
2.回复信件                update replay
3.记录浏览次数          update views
4.审核通过等状态操作 update flag

dao层如何设计
方案一
只有 add,getById,getAll,update函数
update部分字段更新时,取出所有字段到pojo,set需要修改的属性,再将pojo传递给update,写入数据库

方案二
有add,getById,getAll,updateReply,updateViews,updateFlag函数
针对该有的功能编写特定update

方案二是否逻辑层侵入dao层,规范的解耦应该如何设计?

t4m的主页 t4m | 初学一级 | 园豆:141
提问于:2014-06-06 15:50
< >
分享
最佳答案
0

看你怎么考虑性能与开发速度的关系。如果很看重性能,那么方案二;如果就是一般的中小系统,那么直接方案一,搞定,简单,快捷。

根据你当前的这个需求,我觉得选择方案二,可能更好。用方案二时,Dao这层显得比较鸡肋~

收获园豆:50
幻天芒 | 高人七级 |园豆:37205 | 2014-06-06 16:18

非常感谢您的回答

以前写php程序,都是方案二。。。这次用java写,东西不大,主要是为了学习,由于团队开发经验很少,想了解业界的标准做法,公司性的做法。。。

就是dao层,一张表的部分字段update,在不使用框架的前提下,业界标准做法,是怎样的。这个比较让我困惑。。。

t4m | 园豆:141 (初学一级) | 2014-06-08 15:31

如果采用方案一,有两种实现方法

实现方式一

dao层

getByIdTX(conn,id){ "select * from update" }  //  考虑update并发

update(conn,letter)

在server层

conn.setAutocommit(false);

letter=getByIdTX(conn,id);

更新letter部分字段;

update(conn,letter);

conn.commit();

 

实现方式二

dao层

update(letter){

conn=Jdbc.getConnection();

conn.setAutocommit(false);

QueryRunner qr;

letter2=qr.query(conn,"select * from update");

将传入的letter变动的属性,赋值给letter2;

qr.update(conn,sql,letter2的属性);

conn.commit();

 }

 

方式一,在server完成更新操作,但这又不是跨表的复杂业务逻辑操作,貌似应该在dao层实现

方式二,在dao完成更新操作,dao只负责简单的增删改查,这个先查,又加锁,又比较字段的,再更新,貌似应该在service层实现。。。

 

这是我纠结的地方,怎么写都感觉不规范,我只是想学习MVC的规范写法,或者说商业项目的做法,不考虑性能都因素

t4m | 园豆:141 (初学一级) | 2014-06-08 16:34

@t4m: 我也不知道所谓的标准,只能说我们项目组是用的方案二这种方式。

幻天芒 | 园豆:37205 (高人七级) | 2014-06-09 15:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册