2

アプリにソフト削除パターンを導入しています。コンテキストからオブジェクトを削除する代わりに、オブジェクトに「削除済み」のフラグを立てます。ここでは、レシピから材料を (ソフト) 削除する例を使用します。

レシピの材料をリクエストしている場所がたくさんあります。可能であれば、これらすべてを更新することは避けたいと思います (そして、1 つも更新しないリスクがあります)。代わりにingredients、レシピ クラスのゲッターを再定義して、ソフト削除されたオブジェクトを除外できますか?

構成要素の完全なリスト (論理削除を含む) が必要ないくつかの例では、 のような新しいプロパティを使用しますingredientsIncludingDeleted

これは合理的ですか?期待されるものを返す以外のことをするカスタムゲッターを使用すると、顕著な副作用はありますか? 知っておくべきコアデータ固有のものはありますか?

4

1 に答える 1

5

はい、できます。ただし、あなたのアプローチは逆に行っています。デフォルトの getter には述語を含めないでください。これは、フィルター処理されていない結果セットであるという意味を正確に実行する必要があります。6 か月後に誰かがあなたのコードを読むことを考えてみてください。彼らは、「成分」が実際には「filteredIngredients」を意味することを知っていますか? いいえ。

したがって、デフォルトのゲッターの意味を変更する代わりに、新しいゲッター (「filteredIngredients」などの名前) を作成し、それをあらゆる場所で使用します。これは正しい長期的な解決策です。

いくつかの場所でプロパティを変更するのを忘れることが心配な場合は、これを実行してください: 一時的に、成分ゲッターの名前を「tempIngredients」などの別の名前に変更します。これにより、使用されているすべての場所でコンパイラ エラーが発生します。適切なゲッターを使用してこれらのコンパイラ エラーをすべて修正し、デフォルトのゲッターの名前を「ingredients」に戻します。

お役に立てれば。

于 2013-02-27T20:51:44.093 に答える