改变容忍度的建议

µBi*_*Bio 5 c# backwards-compatibility winforms

背景:
我将研究依赖于快速变化的API和快速变化的数据模型的工具,我将无法控制这些模型.

数据模型和API更改很常见,这里的问题是我的代码必须继续使用当前版本和所有过去的版本(即100%后缀兼容性),因为所有内容都将继续使用.

当它遇到缺失/未知功能等时,它也必须优雅地降级.

这些工具将使用WinForms在C#中编写,用于测试自定义硬件.

<Edit>
Run Code Online (Sandbox Code Playgroud)

我的目标是接近于只需要创建类来添加功能,当数据模型发生变化时,创建一组新的数据模型类,这些类将由工厂基于API版本创建.

我面临的挑战是,未来的功能可能取决于具体的数据模型,这些模型可以混合和匹配(直到达到最终的组合).你怎么会优雅地处理这件事?

<Edit2>
Run Code Online (Sandbox Code Playgroud)

当然,一旦产品发货,我想重复使用该工具,只需为新产品添加代码.在我开始之前,每个产品周期都意味着重写(从头开始)所有工具,我打算在将来防止这种工具:)

</Edit>
Run Code Online (Sandbox Code Playgroud)

问题:
为了保持与多个版本的API /数据模型的兼容性,您会建议或成功使用哪些设计技术和模式?

我应该注意哪些陷阱?

Mar*_*ann 4

实际上,所有SOLID模式都适用于此,但特别是单一职责原则(SRP) 和开放/封闭原则(OCP)。

OCP 特别声明该类型应该对扩展开放,但对修改关闭- 这听起来很适合您的情况,因为这是确保向后兼容性的一种方法。

SRP 在这里也非常有帮助,因为它意味着如果一个类只做一件事,并且该事情变得过时,它不会带来很多其他问题。只能任其自生自灭。

在更实际的层面上,我建议您遵循两个原则:

TDD(或只是一个全面的单元测试套件)将帮助您免受重大变更的影响。