1

我正在开发一个应用程序,其中给定项目的所有性能值都是基元。但是,现在有可能在将新数据添加到系统时这些值之一 - 收入 - 不可用。在这些情况下,我们可以简单地将收入的值存储/显示为 0.00

但是,我们现在还希望能够在以后添加这些缺失的数据(但如果存在,则不要覆盖数据)。在将 0.00 添加到数据库时,没有添加标志来指示收入是否实际可用,对我来说,将收入从原始类型 double 更改为盒装原始 Double 并允许 NULLS 用于数据库中的收入列似乎很明显。

然而,在应用程序中有多个地方调用 getRevenue(),并对值执行数学运算。显然,现在 getRevenue() 有可能返回 null 可能会导致重大问题。正如我所提到的,在不存在任何价值的情况下,我们非常乐意将收入显示为 0.00。

因此,一个明显的解决方案似乎是更新 getRevenue() 方法以返回值,或者在值为 null 的情况下返回 0.00。并添加一个新方法 getRevenueDB(),它返回 Revenue 的真实值,包括 null。只有在访问要添加到数据库的值时才会调用此方法。

这似乎是一种解决方案?它应该工作,而且很快。但这似乎是一个非常肮脏的解决方案,有更好的选择吗?

非常感谢所有评论!

4

3 回答 3

1

表示“没有价值”null是正确的做法。

另一种实现是在每次调用 getRevenue() 之后插入空检查,这也是可以的。取决于您是否希望在模型或服务层中增加额外的复杂性。

于 2011-02-10T16:29:11.003 回答
1

您实际上有两个客户,有些需要查看 NULL,有些则明确不能看到空。

如果将“不知道”转换为“零”确实具有商业意义,那么我认为拥有两个不同的访问器是有效的。

我可能会选择一个与 getXxxxDb() 不同的名称,例如 getXxxxxOrNull(),我的理由是可以想象,如果它为空,最终会关心的不仅仅是 Db,

于 2011-02-10T16:23:53.853 回答
0

当您有一个空/缺失的收入要存储时,如何保持收入列not null并将其存储为零?您甚至可以使用触发器或默认值在数据库级别执行此操作。

于 2011-02-10T16:08:09.230 回答