階層関係を持つシステムを設計する際に、多態的な動作を必要とする問題に遭遇することがよくありますが、この多態的な実装の恩恵を受ける作業の種類は複数あります。
たとえば、抽象構文ツリーを使用してコンパイル用に解析されたソースを編成するコンパイラを考えてみましょう。複数のタイプの ValueProvider があり、それぞれが操作スタックに値をロードするための異なるコードの発行を担当する場合があるため、ロジックを多態的に編成すると便利です。問題は、AST で静的分析を実行したい場合があることです。この場合、ツリーでまったく異なる作業を行いたいのですが、それでも分析対象のノードのタイプに依存する動作が発生する可能性があります。つまり、ポリモーフィックな動作が必要ですが、分析コードをコンパイル コードと混ぜ合わせたくはありません。
私が現在これに取り組んでいる方法は、単にツリーを提供する責任を持つオブジェクト モデルを使用してデータを格納することです。次に、ツリーの各コンシューマー (コンパイラーや静的アナライザーなど) は、実行時の型情報を使用して、そのロジックの条件付き分岐を実行します。これは必然的に、ノードのタイプに基づいて、多くの「if/else if」または「switch」コーディングにつながります。ポリモーフィズムが対処するように設計されているのは、この種の厄介な分岐だけですが、並列でバラバラな責任にはそれが必要なようです。
これを構造化するより良い方法はありますか?