2010-05-15 92 views
1

我有一個項目,其中一些業務邏輯被分離到一個DLL項目,這個DLL包含這個軟件爲特定客戶的業務邏輯。dll自定義業務邏輯

現在我遇到了另一個有不同規則的客戶端需要實現該軟件後的問題,我需要一些應用程序根據客戶端使用該軟件加載適當的DLL,考慮到這個DLL包含相同的函數名稱,但不同身體。

我使用C#3.5,是有辦法做到這一點?

+0

您是否有多個不同的客戶端使用相同的軟件實例?或者是每個客戶使用不同的實例? – 2010-05-15 20:39:19

回答

5

是的,你當然可以。您可以分支項目,更改類的實現,保持所有類和類成員的簽名相同,重新編譯,並且您的業務邏輯將按照您的意願行事。

但是,這是不好。您將擁有兩個不同的分支,具有不同的實現方式,您將不得不保持簽名同步永遠。然後你會有另一個客戶,另一個客戶。這將是永無止境的噩夢。

是否有可能將不同功能分離出來?您可以:

  • 將配置放入數據庫或配置文件(可能是XML)中。出於這個原因,很多應用程序都應該基於表或配置文件工作。
  • 您可以在代碼需要不同的地方實現plug-insproviders
  • kindof舊校園,但你可以使用該編譯代碼(忽略有關繪圖出代碼的部分)CodeDom部分實現插件和播放功能。然後,您可以將功能置於易於編輯的文本文件中。
  • 看看Managed Extensibility Framework,只爲這種類型的東西而建。
+1

那麼你推薦的解決方案是什麼? – 2010-05-15 20:25:24

+0

@Robert:只需加入一些選項。設置軟件爲不同的客戶端工作是棘手的,特別是第二客戶端。問題是一些銷售人員或老闆認爲只需稍微調整就可以輕鬆實現,現在穆斯塔法必須使其工作。 – 2010-05-15 20:33:33

+0

+1選項和MEF。 MEF很酷。 – 2010-05-15 20:35:55

1

代碼對接口的業務邏輯 - IBusinessLogic。

您可以將兩個業務邏輯保留在同一個程序集中,並使用基於配置的依賴項注入來指定在部署期間向客戶使用哪個業務邏輯。

1

如果我明白你的問題正確比你正在尋找業務邏輯定製。你可以通過幾種方式實現它。其中一個我在這裏描述。

對定製的DLL應用程序目錄中創建一個文件夾。通過包裝器創建所有業務對象。它將首先使用反射檢查任何業務對象之前的適當類的定製DLL,否則它將從常規類創建業務邏輯。希望這會有所幫助。

+0

使用帶有依賴注入的接口會比使用這個參數中的反射好得多。 – Skuld 2011-12-15 13:42:49