我正在设计一个使用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