gpt4 book ai didi

exception - 哪种契约(Contract)(按契约(Contract)设计)更好?

转载 作者:行者123 更新时间:2023-12-02 08:00:41 26 4
gpt4 key购买 nike

假设我有一个方法

public Patient(int id)
{
----
}

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

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

我应该使用哪个契约(Contract)?还有其他建议吗?

更新:请也对此案发表评论......如果它不是分配 ID 的数据库,而是用户在 UI 中输入的内容.. 例如 SSN .. 那么哪个更好..

我认为 Steve 对 Null 模式的评论是有效的:在这里可能不是一个好主意,因为当 ID 不存在时立即知道会非常有用。

我还认为这里的空模式会有点重

Rob Wells 对因 ID 错误而引发异常的评论:我不认为患者姓名中的拼写错误是特殊情况”恕我直言

最佳答案

请记住,“通过线路”到另一层(无论是数据库还是应用程序服务器)是您可以执行的最昂贵的事件之一 - 通常网络调用比内部调用花费的时间要长几个数量级。内存调用。

因此,构建 API 以避免冗余调用是值得的。

考虑一下,如果您的 API 是这样的:

// Check to see if a given patient exists
public bool PatientExists(int id);

// Load the specified patient; throws exception if not found
public Patient GetPatient(int id);

那么您可能会访问数据库两次 - 或者依赖良好的缓存来避免这种情况。

另一个考虑因素是:在某些地方,您的代码可能具有“已知良好”的 id,而在其他地方则没有。每个位置对于是否应抛出异常都需要不同的策略

这是我过去使用过的一种效果很好的模式 - 有两种方法:

// Load the specified patient; throws exception if not found
public Patient GetExistingPatient(int id);

// Search for the specified patient; returns null if not found
public Patient FindPatient(int id);

显然,GetExistingPatient() 可以通过调用 FindPatient() 来构建。

这允许您的调用代码获得适当的行为,如果出现问题则抛出异常,并在不需要的情况下避免异常处理。

关于exception - 哪种契约(Contract)(按契约(Contract)设计)更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/414264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com