我正在設計一個使用Prism模式的複合WPF/MVVM應用程序。我已閱讀WPF的Developer's Guide to Microsoft Prism Library 5.0,並且我熟悉所描述的大多數模式。C# - Prism for WPF - 通用模塊的庫升級策略
我的應用程序的模塊將包含許多二進制文件(DLL-S)的,其中一些將包括實施的事件聚合和服務共享庫,它將定義公共接口到MVVM模型,事件類通過該模塊。其他模塊將能夠引用這樣一個庫,並通過公共接口和IoC與其模型,事件和服務一起工作。
比方說ModuleA.Shared共享庫包括其的SampleModel和SampleService,這與的SampleModel執行工作的一個公共接口:
namespace ModuleA.Shared
{
interface ISampleModel
{
int SampleProp01 { get; set; }
int SampleProp02 { get; set; }
}
interface ISampleService
{
ISampleModel GetSampleModelInstance();
void SaveSampleModelInstance(ISampleModel obj);
}
}
現在說ModuleB(在非共享二進制)使用ModuleA的公共圖書館:
namespace ModuleB.Engine
{
class SampleClass
{
void SampleMethod()
{
ModuleA.Shared.ISampleService srvc = SomeIoCContainer.Resolve<ModuleA.Shared.ISampleService>();
ModuleA.Shared.ISampleModel obj = srvc.GetSampleModelInstance();
// Do some work on obj...
srvc.SaveSampleModelInstance(obj);
}
}
}
好了,現在讓我們說ModuleB開發和利用第三方(如第三方插件)編程和維持。在某個時間點我添加一個新的屬性,以ModuleA.Shared.ISampleModel:
namespace ModuleA.Shared
{
interface ISampleModel
{
int SampleProp01 { get; set; }
int SampleProp02 { get; set; }
int NewProp { get; set; } // <-- New property
}
/* ... */
}
最終用戶升級我的應用程序,所以老ModuleA的可執行文件已經被新的所取代。 ModuleB由第三方分發,其二進制文件保持不變。
由於ModuleA和ModuleB正與不同版本的編譯ModuleA.Shared.ISampleModel,我認爲國際奧委會解決將不會成功,應用程序將在一個異常結束。
我在問什麼是解決此類問題的良好實踐/模式?如何讓一些模塊升級而不破壞對依賴它們的第三方模塊的支持,並且使用它們的共享庫的舊版本進行構建?
一個很好的回答,非常感謝你!您所描述的解決方案將運行良好。出於好奇 - 您是否知道複合應用程序體系結構的任何其他版本控制策略? –
不是真的,最終這是一個問題,您需要多長時間提供一個新API,以及您需要多長時間才能支持舊的api版本。產品管理必須與任何支付開發費用的人討論 – Haukinger