私は、良い契約がどこで終わり、パラノイアが始まるのかを理解しようとしています. 本当に、私は良い開発者が何を気にかけ、何を省くべきなのかまったくわかりません:)
java.lang.Integer のような値を保持するクラスがあるとします。そのインスタンスは、他のオブジェクト (MappedObjects) (1 対多または多対多) によって集約され、MappedObjects のメソッド内でよく使用されます。パフォーマンス上の理由から、これらの関係を TreeMap (guava MultiMap は関係ありません) で追跡し、整数キーの範囲にバインドされた MappedObjects を高速に反復できるようにします。したがって、システムを一貫した状態に保つには、MappedObject.bind(Integer integer) メソッドを変更して、次のように Map を更新する必要があります。
class MappedObject {
public void bind (Integer integer) {
MegaMap.getInstance().remove(fInteger, this);
fInteger = integer;
MegaMap.getInstance().add(fInteger, this);
}
...
private Integer fInteger;
}
この最終メソッドを使用して抽象 MappedObject クラスを作成し、他のメソッドを強制的に継承させることもできますが、それは失礼です。メソッド bind() を使用して MappedObject をインターフェイスとして定義し、スケルトン実装を提供する場合、他の開発者は後でそれをオブジェクトに含め、Map を更新せずに自分でメソッドを実装するのを忘れる可能性があります。