誰かが完全なデータに依存するコードを設計しました。XMLには常にすべての要素が含まれていました。データソースは現在、スパースXMLを送信しています。以前は空だったとしたら、今はなくなっています。だから、バグを修正しながらリファクタリングする時が来ました。
次のような100行以上のコードがあります。
functionDoSomething(foo, bar, getRoot().getChild("1").getChild("A").
getChild("oo").getContent());
今を除いて、getChild( "A")はnullを返す可能性があります。または、getChild(xxx)メソッドのいずれかが可能性があります。
1つの追加の工夫として、getChild()の代わりに、実際には4つの別個のメソッドがあり、これらは特定の順序でのみ発生する可能性があります。誰かがvarargs呼び出しを提案しました。これは悪い考えではありませんが、私が望むほどきれいには機能しません。
これをクリーンアップする最も簡単な方法は何ですか?最高の?すべての行の周りに「試して/キャッチ」することが提案されましたが、それは醜いです。上記のメソッドの3番目の引数を独自の関数に分解することは機能する可能性があります...しかし、それは100以上の新しいメソッドを必要とし、それほどではありませんが、醜い感じがします。
getChild(xxx)呼び出しの数は、1行あたり6〜10の範囲であり、深さは固定されていません。これに対して正しいDTDを取得する方法もありません。事前の注意なしに後で追加される予定です。その場合にログに警告を表示したい場合は、XMLの余分な行を適切に処理する必要があります。
アイデア?
getChild()は、実際には便利なメソッドです。私が考えている最もクリーンな方法は、コンビニエンスメソッドが有効なChildオブジェクトを返すようにすることですが、その「空の」子のgetContent()は常に「」を返すようにします。