5

私たちのプロジェクトでは、いくつかのオブジェクト (User など) を格納する必要があり、User クラスにも検証フラグ (setOutdated や isOutdated などのメソッド) が必要です。

ときどき、User オブジェクトが null になることがありますが、この場合、検証フラグに到達できる必要があります。これらのメソッドを User クラスから抽出することは可能ですが、セマンティクスのために、そのフィールドとメソッドはそのクラス内にある必要があります。

Null オブジェクト パターン (このような)に関する記事をいくつか見つけました。 null ではない 時代遅れではありません。

PS: クラスに「古い」フィールドを導入すると、オブジェクトを null に設定するのではなく、オブジェクトをクリアするのが非常に難しくなります。

4

2 に答える 2

2

(特に)「null outdated」と「null not outdated」を区別したい。
これは、動作が異なる2 つの異なる Null オブジェクトを提案することを意味します。これは、Null オブジェクトが 1 種類の動作、つまりその種の初期化されていないオブジェクトのデフォルトの動作を持つべきであるというパターンに違反しています。

@Kentが提供するソリューションを使用するか、ユーザーオブジェクトを「PresentUser」および「FormerUser」オブジェクトのようにすることをお勧めします。後者は技術的には自分で提案するソリューションと同じですが、Null オブジェクト パターンではありません。

于 2011-11-10T10:20:42.890 に答える
2

私の最初のアイデアは、UserUtil クラスを追加することです (名前は別のものである可能性があります)。

そして次のような方法

public static boolean isUserOutdated(User u){
return (u==null)? true :u.isOutdated();

}

 or return (u==null)? false :u.isOutdated(); depends on your businesslogic

あなたの状況ではうまくいきますか?

于 2011-11-10T10:11:55.963 に答える