私は自分のアプリケーションにとって重要である単純なコピー/クローンの方法があります:コピーしてはならないいくつかの特定のフィールドがあることを新しいフィールドが追加されたときにクローン/コピーの方法を破らないようにするにはどうすればよいですか?
@Override
public Operation getCopy() {
Operation copy = new Operation();
copy.year = this.year;
copy.stage = this.stage;
copy.info = this.info;
copy.user = this.user.getCopy();
// NOT TO BE COPIED! copy.id = this.id;
...
return copy;
}
注意を。また、独自のコピー方法を持つ複雑なオブジェクト(Userなど)もあります。
問題は時々、開発者がコピーされるべき新しいフィールドを作成しますが、彼はcopy
メソッドに追加するのを忘れ、新しいコードとして開発されていることである。
private String additionalInfo;
そして、そこではないにもかかわらず、コンパイルエラーが発生した場合、私たちのQAチームによって、またはユーザーによってさえ後で発見されるビジネス上の問題があります。
これを防ぐにはどうすればよいですか?私は元のオブジェクトとそのコピーを比較するJUnitテストを試しましたが、既存のフィールドではうまく動作しますが、新しいフィールドを考慮していません。
このアプローチは、変更があっても非常に不安定です。通常は 'assertEquals(copy、original、" copy failed ");'をテストすれば十分です。 –
@LewBlochこれは、すべてのフィールドをチェックする 'equals'に頼っています。 –
平等を確立するために必要なもののみ。状態が他のフィールドによって決定された場合、それらは 'equals'などで説明されるべきです。 –