0

ベンダーとして、多くのクライアントにアプリケーションを出荷する必要があり、特定のクライアント向けにアプリケーションをカスタマイズする必要がある場合もあります。たとえば、特定の機能を有効または無効にしたり、そのクライアントに適切なデフォルトを設定したりします。

一部のオープンソース プロジェクトでは、これが次のパターンで行われているのを見てきました。

#define ENABLE_FEATURE_XYZ 0

#if ENABLE_FEATURE_XYZ
void featureXyzImpl()
{
    ...
}
#endif

void main()
{
#if ENABLE_FEATURE_XYZ
    featureXyzImpl();
#endif
}

ここでは、ENABLE_FEATURE_XYZ を 0 または 1 に定義して、機能をオンまたはオフにします。利点は、不要なコードが存在しないことです。

しかし、一部の同僚は、現実の世界では、代わりに次のパターンを使用して、構成ファイルまたはレジストリ設定を調べて、実行時にカスタマイズを実行する必要があると考えています。

void featureXyzImpl()
{
    ...
}

void main()
{
    if (configFileValue("Enable Feature XYZ") == true) {
        featureXyzImpl();
    }
}

彼らの理由は、機能を有効または無効にするために再コンパイルする必要がなく、ライブラリまたは実行可能ファイルの複数のバージョンを保持する必要がないため、ソフトウェアの保守とテストが容易になるためです。テスト担当者は実行時に機能を有効または無効にできます。

これらの方法のどれが特定の状況に適しているかを判断するためのガイドまたは方法論はありますか? それとも、コイントスでどちらかを選択するか、個人的な好みで選択する必要がありますか?

4

2 に答える 2

1

「時々」がどれだけあるかによると思います。顧客ごとに個別のバージョンを作成して機能を有効/無効にする場合、アプリケーションの特別なバージョンをサポートする必要があるため、どの顧客に何を提供したかを注意深く追跡する必要があります。構成ファイルを使用する場合、賢明な顧客は、お金を払わずに機能を有効にする機会があるかもしれませんが、保守ははるかに簡単です。構成ファイルは保守がはるかに簡単なので、できるだけ長く使い続けたいと思います。

于 2013-09-24T07:59:03.623 に答える