在CRUD中执行C的方法中,它应该返回什么?

时间:2009-05-26 07:19:57

标签: java api oop

想象一个带有方法的接口,用于创建地址类型的对象。这里涉及的实体是无关紧要的。

/**
 * @throws IllegalArgumentException if addy is null or invalid
 * @throws PersistenceException if db layer encounters a problem
 */
Object addAddress( Address addy );

addAddress 将域对象插入数据库。

我已将返回值保留为对象。我的问题是:返回类型应该是什么?通常我选择了一个布尔返回值(假设没有抛出异常)。有时我选择返回地址记录的自动生成的PK密钥。通常情况下,我只是将其留作 void 。你通常做什么&为什么?

5 个答案:

答案 0 :(得分:4)

bool绝对没有用,因为在数据库中插入一行时,没有架构上合理的方法可以找出实际出现的问题(“架构声音”我指的是没有单例和其他共享状态服务层)。剩下的是PK和void,我更喜欢PK,因为它更好地传达了意图。

答案 1 :(得分:4)

我传统上使用该方法返回生成的id或根本没有返回值。但我开始喜欢返回添加的对象本身的想法,填充生成的PK。如果对象有方法,你可以直接使用返回值并调用方法,或者你可以直接将它传递给其他方法:

// invoke a method on the returned object
addAddress(theAddress).DoSomething();

// pass the object to some other method
SomeOtherMethod(addAddress(theAddress));

我不会做的是使用布尔值; add方法中的失败是一种异常状态,应该这样处理,抛出异常。

答案 2 :(得分:1)

我返回自动生成的主键。你可以更新地址对象本身(你可能仍然想要),但返回它会使方法的重点变得明显。

这将签名:

long addAddress(Address address);

答案 3 :(得分:1)

大部分时间我都会失效。我们使用持久化框架(Hibernate)来更新对象的主键,因此不需要返回它。当插入不成功时,抛出异常。

持久化对象时不需要方法链接,但如果需要,Aaron Digulla的建议也很好。

答案 4 :(得分:0)

如果您喜欢方法链接,可以return this

dao
.addAddress (a1)
.addAddress (a2)
.addAddress (a3)
.addAddress (a4)
;