下記のシナリオでリファクタリングの提案を探しています。
私たちはDataMap<header,RecordHolder>
です。
RecordHolderクラスの構造は、次のとおりです。
RecordA、RecordBは共通基底型から継承しています。タイプ曖昧さのためのデザイン
RecordHolder{
RecordA
RecordB
RecordC
RecordD;
setRecordA();
setRecordB();
....
}
パーサユーティリティは、ファイルの各行を読み取り、対応するレコード・タイプに変換:解析から戻った
Map<key,Record> parse(String line){....}
、キーに対応するRecordHolderインスタンスがフェッチされるべきであり - そして解析されたレコードを更新するには、適切なsetRecordXXXメソッドを呼び出す必要があります。で
RecordHolder d = DataMap.get(key);
if(d==null){ ==========> (A)
d = new RecorHolder();
DataMap.put(key,d);
}
d.setRecordXXX(Record);=========>(B)
質問:
(A)をいただきました!マップの取得、他の-入れ-とリターンのための最高のイディオム。
私はレコード(RECORDA、RecordBなどなど)の明示的な型チェックせずにこれを達成することができますどのように(B)
レコードがすべてRecordクラスから継承されている場合、RecordHolderは各サブクラスの可能なインスタンスではなく単一のレコードメンバーを持っていないのはなぜですか? –
setRecordA()、setRecordB()は実際に何をしますか? RecordA/RecordBメンバーにレコードを割り当てるだけですか?または、それぞれの異なるレコードタイプに固有のロジックがありますか? –
各ホルダーオブジェクトには、レガシーからのメソッドsetRecordXXXのバリエーションを考慮した、各タイプのレコードが含まれます。 – IUnknown