2

我在我的应用程序中引入了软删除模式。我不会从我的上下文中删除对象,而是将它们标记为“已删除”。我将在这里使用从食谱中(软)删除成分的示例。

我在很多地方都要求提供食谱的成分。如果可能的话,我想避免更新所有这些(并冒着丢失的风险)。相反,我可以重新定义ingredients配方类的 getter,我将在其中过滤掉软删除的对象吗?

我需要完整成分列表(包括软删除)的少数情况将使用新属性,例如ingredientsIncludingDeleted.

这合理吗?使用自定义 getter 是否有任何显着的副作用,而不仅仅是返回预期的内容?我应该注意什么特定的核心数据?

4

1 回答 1

5

是的,你可以这么做。但是,您的方法是倒退。默认的 getter 不应该有任何谓词。它应该完全按照它所暗示的那样做,这是一个未过滤的结果集。想想有人在 6 个月后阅读您的代码。他们会知道“成分”实际上意味着“过滤的成分”吗?不。

因此,不要更改默认getter 的含义,而是创建一个新的 getter(命名为“filteredIngredients”,并在任何地方使用它。这是正确的长期解决方案。

如果您担心忘记更改某些地方的属性,请执行以下操作:暂时将您的成分吸气剂重命名为其他名称,例如“tempIngredients”。这将在任何使用它的地方导致编译器错误。使用适当的 getter 修复所有这些编译器错误,然后将默认的 getter 重命名为“ingredients”。

希望这可以帮助。

于 2013-02-27T20:51:44.093 回答