您認爲我們應該如何編碼以根據安裝類型處理啓用或禁用功能。目的是爲單獨的版本進行單一安裝,並根據安裝類型提供可用的功能。根據安裝類型啓用/禁用功能
這樣做的一種方法是有條件地編譯代碼,但這會使代碼變得很髒並且難以維護。
您認爲我們應該如何編碼以根據安裝類型處理啓用或禁用功能。目的是爲單獨的版本進行單一安裝,並根據安裝類型提供可用的功能。根據安裝類型啓用/禁用功能
這樣做的一種方法是有條件地編譯代碼,但這會使代碼變得很髒並且難以維護。
您可以使用基於插件的體系結構,其中所有(或大多數)功能都作爲擴展核心應用程序功能的插件來實現。這樣,你的版本只會在裝配/裝運等方面有所不同。
通過這種方法,您可以隨時通過複製缺失的組件將「Starter」版變成「Professional」。爲了解決這個問題,你仍然必須求助於條件編譯,但是你必須有條件地編譯負責加載這些插件的塊。
例如,假設您的專業版希望能夠添加導出功能。爲此,您創建一個單獨的IExporter
插件界面。這裏是你如何處理這個問題:
public IExporter GetExporter(FormatType format)
{
#if PROFESSIONAL_EDITION
return ExporterRegistry.GetExporter(format);
#else
return NullExporter();
#endif
}
因此,您的專業版將有能力使用自定義擴展IExporter
S,而是非專業版,即使全部到位「專業」組件,將不能夠利用這個功能。
標誌將是一個選項,但我想這將是「條件編譯」。安裝類型會根據標誌設置一個標誌,一些代碼會執行,否則它將被忽略。
你可以有不同的代碼分支?這樣,每個版本只能擁有該安裝類型的相關代碼。無需攜帶永遠不會使用的代碼。
您可以使用條件編譯或ConditionalAttribute。 這裏是一篇文章解釋這些主題:Building and Maintaining Multiple Application Editions using Conditional Compilation
「分支」會使版本數量增加時難以維護。 – Faisal