あなたの意見では、インストールの種類に基づいて機能の有効化または無効化を処理するために、どのようにコーディングする必要がありますか? 目的は、個別のエディションに対して単一のインストールを行い、インストールの種類に基づいて機能を使用できるようにすることです。
これを行う 1 つの方法は、コードを条件付きでコンパイルすることですが、これではコードが汚くなり、保守が難しくなります。
あなたの意見では、インストールの種類に基づいて機能の有効化または無効化を処理するために、どのようにコーディングする必要がありますか? 目的は、個別のエディションに対して単一のインストールを行い、インストールの種類に基づいて機能を使用できるようにすることです。
これを行う 1 つの方法は、コードを条件付きでコンパイルすることですが、これではコードが汚くなり、保守が難しくなります。
プラグインベースのアーキテクチャに頼ることができます。このアーキテクチャでは、すべて (またはほとんど) の機能がアプリのコア機能を拡張するプラグインとして実装されます。このように、エディションは、どのアセンブリがインストール/出荷/などされるかだけが異なります。
確かに、このアプローチでは、欠落しているアセンブリをコピーするだけで、いつでも "スターター" エディションを作成して "プロフェッショナル" に変えることができます。これを解決するには、条件付きコンパイルに頼る必要がありますが、これらのプラグインのロードを担当するブロックを条件付きでコンパイルする必要があります。
たとえば、Professional エディションにエクスポート機能などを追加できるようにしたいとします。そのために、別のIExporter
プラグイン インターフェイスを作成します。これを処理する方法は次のとおりです。
public IExporter GetExporter(FormatType format)
{
#if PROFESSIONAL_EDITION
return ExporterRegistry.GetExporter(format);
#else
return NullExporter();
#endif
}
したがって、Professional エディションにはカスタム s を使用して拡張する機能がありますが、IExporter
Professional 以外のエディションでは、すべての「Professional」アセンブリが配置されていても、この機能を利用することはできません。
条件付きコンパイルまたは ConditionalAttribute を使用できます。これらのトピックを説明する記事は次のとおりです。条件付きコンパイルを使用した複数のアプリケーション エディションの構築と管理
フラグは 1 つのオプションですが、それは「条件付きコンパイル」になると思います。インストールの種類によってフラグが設定され、フラグに基づいて一部のコードが実行され、それ以外の場合は無視されます。
コードの異なるブランチを持つことはできますか? そうすれば、各バージョンには、そのインストール タイプに関連するコードのみが含まれます。決して使用されないコードを持ち歩く必要はありません。