コードベースには、次のようなコードが散らばっています。
BaseRecord record = // some BaseRecord
switch(record.source()) {
case FOO:
return process((FooRecord)record);
case BAR:
return process((BarRecord)record);
case QUUX:
return process((QuuxRecord)record);
.
. // ~25 more cases
.
}
その後
private SomeClass process(BarRecord record) { }
private SomeClass process(FooRecord record) { }
private SomeClass process(QuuxRecord record) { }
それは私をひどく悲しくさせます。次に、新しいクラスが から派生するたびにBaseRecord
、コード ベース全体を追跡して、これらの case ステートメントを更新し、新しいprocess
メソッドを追加する必要があります。この種のロジックはどこでも繰り返されます。それぞれにメソッドを追加してクラスでオーバーライドするには多すぎると思います。どうすればこれを改善できますか?