想象一个带有方法的接口,用于创建地址类型的对象。这里涉及的实体是无关紧要的。
/**
* @throws IllegalArgumentException if addy is null or invalid
* @throws PersistenceException if db layer encounters a problem
*/
Object addAddress( Address addy );
addAddress 将域对象插入数据库。
我已将返回值保留为对象。我的问题是:返回类型应该是什么?通常我选择了一个布尔返回值(假设没有抛出异常)。有时我选择返回地址记录的自动生成的PK密钥。通常情况下,我只是将其留作 void 。你通常做什么&为什么?
答案 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)
;