首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >哪个合同(按合同设计)更好?

哪个合同(按合同设计)更好?
EN

Stack Overflow用户
提问于 2019-06-24 06:06:28
回答 2查看 0关注 0票数 0

假设我有一个方法

代码语言:javascript
复制
public Patient(int id)
{
    ----
}

返回给定id的Patient对象..我可以用两种方式定义合同

  1. 如果患者不存在,方法将返回null
  2. 如果患者不存在,方法将抛出异常。在这种情况下,我还将定义一个查询方法,如果Patient存在于数据库中则返回true,否则返回false ...

我应该使用哪种合同?还有其他建议吗?

更新:请对这个案例发表评论...如果它不是一个数据库分配的ID,它是用户在UI中输入的东西..比如SSN ..那么哪一个更好..

关于Steve认为有效的Null模式的评论:这里可能不是一个好主意,因为当ID不存在时立即知道它真的很有用。

我也认为这里的Null模式会有点沉重

Rob Wells对抛出异常的评论,因为它的错误ID:我不认为患者姓名中的拼写错误是特殊情况“恕我直言

EN

回答 2

Stack Overflow用户

发布于 2019-06-24 14:35:47

对于这种情况,我会让方法对于不存在的患者返回null。

当系统本身出现问题时,我更倾向于使用异常来帮助降低吞吐量。

在这种情况下,它可能是:

  1. 如果输入搜索表单,患者ID中的拼写错误,
  2. 数据输入错误,或
  3. 一个工作流程问题,即患者的记录还没有输入。

因此,返回null而不是异常。

如果联系数据库时出现问题,那么我会让该方法引发异常。

编辑:刚看到签名中的患者ID是一个整数,感谢Steven Lowe,所以我更正了我的原因列表。

关于何时使用异常(对于系统错误)与其他返回错误的方法(对于简单数据输入错别字)的描述,我的基本观点仍然存在。恕我直言。

HTH

干杯,

票数 0
EN

Stack Overflow用户

发布于 2019-06-24 15:51:08

你应该抛出异常。如果您的id患者没有指向有效的患者,那么它来自哪里?可能发生了非常糟糕的事情。这是一个特例。

编辑:如果你做的不是基于整数的检索,比如基于文本的搜索,那么返回null就可以了。特别是因为在这种情况下,您将返回一组结果,这些结果可能不止一个(多个患者姓名相同,出生日期相同,或者您的标准是什么)。

搜索功能应与检索功能具有不同的合同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档