看了下club的代码,感觉很多DAO貌似都没啥用处?

看了几个service,发现里面定义的dao,大多都是用来执行一些查询的SQL.  既然是查询,为啥不直接用Db的相关静态方法呢?因为我绝大部分都是直接用的Db类的方法执行SQL查询(除非需要用到model操作的),所以有此疑问.

评论区

JFinal

2018-01-24 23:42

使用 model 而不是 Db 静态方法来查询,返回的结果是封装好的 Model,这些 Model 还生成过 getter setter 方法,在开发过程中使用这些 setter getter 方法对于重构有好处,而且不需要记忆字段名

当你使用 Db 查询时,得到 Record 对象,取值时需要这样: record.get(字段名),这不仅有记忆上的负担,对于重构来说也不方便,而且字段名写错以后也可能引发 bug

此外,model 中还可以实现一些其它的方法,在使用过程中的好处不言而喻,例如,你看一下 jfinal club 项目中的 Account 在 LoginServer 中的用法:
if (loginAccount.isStatusLockId()) {
return Ret.fail("msg", "账号已被锁定");
}

如果使用的是 Record,你需要这样来操作:
if (record.getInt("status") == -1) {
return Ret.fail("msg", "账号已被锁定");
}

无论是在可读性还是可维护性上都会差很多,在多数应用场景下都会使用 Model,也有一些比较特殊的场景特别适合使用 Db + Record 模式

例如,做一个具有大量关联查询的报表系统,多表关联出来的字段值,在 model 中很多都没有相应的 getter setter 方法,所以前面谈到的有关 setter getter 方法带来的优势也就没有了

JFinal9527

2018-01-25 11:33

系统不大的话,我觉得直接记住表里面字段更方便,但是系统大或者多人一起搞的话,记字段名会很麻烦,而且很容易出错

flash866

2018-01-25 15:30

@JFinal 明白了,谢谢老大

flash866

2018-01-25 15:30

@JFinal9527 多谢回复

热门反馈

扫码入社