パーサーライブラリの一部として、次のオブジェクト階層があります。
ParseEntry | | / \ / \ / \ NumericParseEntry StringParseEntry
等。、
これらのオブジェクトは基本的にデータを保持します。次に、evaluate(値が解析エントリ基準に合格するかどうかを評価するため)、generateSQL(解析エントリ基準に基づいてSQL条件を生成するため)などの一連の操作があります。
単一責任の原則により、これらの関数を特定の解析エントリクラスに追加したくないので、解析エントリ階層にこれらの関数を実装する個別の階層を維持したいと思います。これにより、特定の実装を複数の解析エントリに再利用できます。
ある操作を実行している解析エントリの解析テーブルを参照しているときに、適切な操作オブジェクトを取得できるように、操作をオブジェクトと結合する方法を考えていました。
私が考えることができる大まかな方法の1つは、解析エントリタイプとそれに対応するエバリュエーター/SQLgeneratorの間のマップを維持するファクトリクラスを持つことです。もう1つの方法は、evaluator / sqlジェネレーターを解析エントリのデータメンバーとして埋め込み、それらをゲッターに返すことです。
これを即興で行うための助けをいただければ幸いです。