2010-02-10 40 views
2

您認爲我們應該如何編碼以根據安裝類型處理啓用或禁用功能。目的是爲單獨的版本進行單一安裝,並根據安裝類型提供可用的功能。根據安裝類型啓用/禁用功能

這樣做的一種方法是有條件地編譯代碼,但這會使代碼變得很髒並且難以維護。

回答

3

您可以使用基於插件的體系結構,其中所有(或大多數)功能都作爲擴展核心應用程序功能的插件來實現。這樣,你的版本只會在裝配/裝運等方面有所不同。

通過這種方法,您可以隨時通過複製缺失的組件將「Starter」版變成「Professional」。爲了解決這個問題,你仍然必須求助於條件編譯,但是你必須有條件地編譯負責加載這些插件的塊。

例如,假設您的專業版希望能夠添加導出功能。爲此,您創建一個單獨的IExporter插件界面。這裏是你如何處理這個問題:

public IExporter GetExporter(FormatType format) 
{ 
#if PROFESSIONAL_EDITION 
    return ExporterRegistry.GetExporter(format); 
#else 
    return NullExporter(); 
#endif   
} 

因此,您的專業版將有能力使用自定義擴展IExporter S,而是非專業版,即使全部到位「專業」組件,將不能夠利用這個功能。

0

標誌將是一個選項,但我想這將是「條件編譯」。安裝類型會根據標誌設置一個標誌,一些代碼會執行,否則它將被忽略。

你可以有不同的代碼分支?這樣,每個版本只能擁有該安裝類型的相關代碼。無需攜帶永遠不會使用的代碼。

+0

「分支」會使版本數量增加時難以維護。 – Faisal