【发布时间】:2011-03-21 09:08:40
【问题描述】:
我有一个struts和hibernate项目,
从动作类中,我需要调用 DAO,从数据库中获取数据。
我需要将表单类中的所有字段传递给 DAO 中的方法。
表单大约有15个字段,都是String类型的。
哪个更好或更高效:将字段直接传递给 DAO,还是将整个 FORM 对象作为参数传递?
【问题讨论】:
我有一个struts和hibernate项目,
从动作类中,我需要调用 DAO,从数据库中获取数据。
我需要将表单类中的所有字段传递给 DAO 中的方法。
表单大约有15个字段,都是String类型的。
哪个更好或更高效:将字段直接传递给 DAO,还是将整个 FORM 对象作为参数传递?
【问题讨论】:
想象一个有 15 个字符串参数的方法:
public void save(String name, String firstName, String email, String ..., String ..., String ..., String ..., String ..., String ..., String ..., String ..., String ..., String ..., String ..., String ...)
哦,看,水平滚动条。还有一个很小的按钮。嗯。这看起来很可疑。不要这样做。
如果您有超过 3 或 4 个参数,最好在参数对象中收集参数。长参数列表会产生以下问题:
您不能省略任何参数。因此,如果您不需要它们中的任何一个,则必须传递很多 nulls 或其他东西。
参数的顺序是固定的。如果你需要改变它,或者添加参数,你总是有麻烦。如果您犯了错误(而且您会犯错),没有简单的方法可以找出错误的位置。
如果使用带有 setter 和 getter 的参数对象,则可以按任意顺序填写值。
参数没有名字。示例:
method("23894623");
这是什么意思?看这里:
Params params = new Params();
params.setPhoneNumber("23894623");
method(params);
哦,这是一个电话号码。现在很明显了。
【讨论】:
在方法或基于 Collection 的数据结构中传递 15 个参数容易出错且难以维护。
您可以简单地将您的 pojo(Form bean)传递给一个 Dao 方法,该方法将构建查询。作为奖励,hibernate 提供了hibernate Query by Example API,它可能 100% 适合您解决这个问题。
【讨论】: