非法操作——我应该抛出异常吗?
Illegal operation - should I throw an exception?
我的 JEE 7 应用程序包含两个实体(目前):Owner
和 Company
。我还创建了 OwnerService
,其中包含 boolean ownerHasCompany(Owner, Company)
和 void removeCompanyOfOwner(Owner, Company)
等方法。当 Company
不属于 Owner
时,我很困惑我该怎么办。我有两个想法:
- 在
removeCompanyOfOwner
中使用 ownerHasCompany
方法,当它 returns false
然后抛出异常(但是哪个?IllegalArgumentException
?)。但是为了避免这种异常,客户必须在他的代码中使用 ownerHasCompany
方法。所以同一个方法会执行两次。
- 不检查
Owner
是否有 Company
,只为客户保留。 (但我希望在服务中有逻辑并且只在我的控制器中调用适当的方法)。
哪种方式更好?或者也许还有其他解决方案?
我喜欢使用 API,其中有一种方法可以测试另一种方法何时会抛出异常。所以我认为客户端的代码应该是:
if (ownerHasCompany(owner, company)) {
removeCompanyOfOwner(owner, company);
}
方法 removeCompanyOfOwner
可以从
开始
if (!ownerHasCompany(owner, company))
throw new IllegalStateException();
是的,这意味着方法ownerHasCompany
被调用了两次。我不知道这个检查是如何完成的,但这种低效率似乎是微不足道的。
另一种方法是使 removeCompanyOfOwner
return 成为 boolean
; true
如果公司被删除,false
否则。使用此解决方案,方法 removeCompanyOfOwner
开始
if (!ownerHasCompany(owner, company))
return false;
我的 JEE 7 应用程序包含两个实体(目前):Owner
和 Company
。我还创建了 OwnerService
,其中包含 boolean ownerHasCompany(Owner, Company)
和 void removeCompanyOfOwner(Owner, Company)
等方法。当 Company
不属于 Owner
时,我很困惑我该怎么办。我有两个想法:
- 在
removeCompanyOfOwner
中使用ownerHasCompany
方法,当它 returnsfalse
然后抛出异常(但是哪个?IllegalArgumentException
?)。但是为了避免这种异常,客户必须在他的代码中使用ownerHasCompany
方法。所以同一个方法会执行两次。 - 不检查
Owner
是否有Company
,只为客户保留。 (但我希望在服务中有逻辑并且只在我的控制器中调用适当的方法)。
哪种方式更好?或者也许还有其他解决方案?
我喜欢使用 API,其中有一种方法可以测试另一种方法何时会抛出异常。所以我认为客户端的代码应该是:
if (ownerHasCompany(owner, company)) {
removeCompanyOfOwner(owner, company);
}
方法 removeCompanyOfOwner
可以从
if (!ownerHasCompany(owner, company))
throw new IllegalStateException();
是的,这意味着方法ownerHasCompany
被调用了两次。我不知道这个检查是如何完成的,但这种低效率似乎是微不足道的。
另一种方法是使 removeCompanyOfOwner
return 成为 boolean
; true
如果公司被删除,false
否则。使用此解决方案,方法 removeCompanyOfOwner
开始
if (!ownerHasCompany(owner, company))
return false;