2011-06-11 41 views
5

在這種情況下考慮:爲多個客戶定製c#WinForm應用程序

我有一個C#窗體窗體應用程序。這個應用程序對我所有的客戶都是一樣的。現在他們中的一個需要修改添加新文本框和新邏輯的表單。

我顯然不想重複我的應用程序,並插入IF語句與客戶ID來控制邏輯可以很容易地驅動到意大利麪風格的代碼。

我認爲在這種情況下,我可以爲每個客戶創建一個單獨的dll項目;在內部,我可以編寫自定義窗體,實現與默認窗體相同的界面(對於邏輯類也是相同的),我可以嘗試通過配置文件切換這些dll或使用正確的客戶dll構建項目(或者使用例如Windsor Castle for DI )。

這是一個有效的模式?存在一種不同的方式?

更新

我嘗試列表:

+1

在[MEF vs IOC/DI]上查看此答案(http://stackoverflow.com/questions/108116/mef-managed-extensibility-framework-vs-ioc-di)。我認爲MEF或DI會爲你工作。就個人而言,我會使用Autofac,但我有偏見。 – bentayloruk 2011-06-11 20:25:38

回答

1

如果您正在開發multitenant應用程序,則有類似Autofac的DI框架支持這種自定義。看看this article

你也可以使用你的源代碼管理系統來幫助你。當您需要自定義時,創建一個分支並在那裏進行自定義,因此您不必複製代碼。

+0

我看到溫莎也支持多租戶!然而,你是在​​暗示我Autofac? – danyolgiax 2011-06-11 10:01:06

+0

不,他建議你使用DI容器。任何容器都可以工作,但Autofac有關於開發多租戶應用程序的有用文檔。 – Steven 2011-06-11 11:22:40

3

我認爲在這種情況下,MEF將是一個更好的選擇。 Castle更像是業務邏輯的DI引擎,對於控制對象生命週期很有用,特別是當您希望能夠切換程序的工作方式(多個小線程或一個線程中的單個大操作)時。另一方面,MEF將剝奪您需要爲此類配置添加配置文件的需求。你只需要操作庫。我認爲MEF最適合客戶端的GUI形式。

+0

溫莎城堡啓用DI。但是,這不限於業務邏輯,可以在沒有配置的情況下完成。 Autofac也是如此。因此,你在這個答案中推薦MEF的理由似乎具有誤導性。另外,當你說「多個小線程或一個線程中的單個大操作」時,我不明白你的意思。你可以擴展這個嗎? – bentayloruk 2011-06-11 20:17:35

+0

我沒有寫它只限於BL,只是我覺得它更合適。你可以讓DI硬編碼,或者在配置文件中(我認爲配置文件更加靈活)。使用MEF,您可以實現其他功能 - 您可以控制必須加載的內容,只需提供適當的庫,而無需修改任何文件。各種插件。有很多情況下你需要在GUI中使用這個功能,並且當它是整個客戶端應用程序的一部分時,它們大多適用於BLL。 – AlexanderMP 2011-06-11 22:44:13

+0

至於線程...我確實有一種情況,在BLL中並行化一個進程會導致一些異常,我沒有時間去解決。所以我寫了2個相同功能的實現,並且在應用程序配置文件中更改組件生活方式時沒有任何問題。 – AlexanderMP 2011-06-11 22:48:12