私は多くの異なるストリーム(異なるフォーマット)からのデータを解析/処理し、データの異なるソースの数は私のシステムで増え続けています。ソースを指定する構成ファイルに基づいて、次のような要求された適切なパーサー/プロセッサーのペア(小さな共通インターフェースに従う)を提供するファクトリクラスがあります。
static Foo* FooFactory::createFoo(source c, /*couple flags*/)
{
switch (c)
{
case SOURCE_A:
{
//3 or 4 lines to put together a parser for A, and something to process stuff from the parser
return new FooA(/*args*/);
}
break;
//too many more cases which has started to worry me
default:
return NULL;
};
}
問題は、ソースの数が増えるにつれて、2つの問題に直面していることです。まず、ビルドするときに、FooA, FooB, FooC, FooD, FooE...
関連するすべてのコードを取得していることに気付きます。たとえ、要求するだけのバイナリをビルドすることにしか興味がなかったとしても、FooA
言うことができます。それで、それをモジュール化する方法について。二次的な問題は、今の場合SOURCE_A
、私は戻ってきますがFooA
、興味があるSOURCE_A
が、それを解析するさまざまな方法があり、おそらくプラグアンドプレイの機能を備えている場合はどうFooA_simple
なりますか?FooA_careful
何らかの理由で-u
、バイナリを構築するときのリンカーのオプションが頭に浮かびました...それはどういうわけか私にプラグアンドプレイの概念を示唆していますが、問題への良いアプローチが何であるかはわかりません。