1
4
几乎所有的 固体 模式在这里适用,但特别是 Single Responsibility Principle (SRP)和 Open/Closed Principle (OCP)。 OCP特别声明类型应该是 打开进行扩展,但关闭进行修改 -这听起来很适合您的情况,因为这是一种确保向后兼容性的方法。 SRP在这里也非常有用,因为它意味着如果一个类只做一件事,而这件事变得过时了,它不会拖累很多其他问题。它可以自己去死。 在更实际的层面上,我建议您遵循两个原则:
TDD(或者仅仅是一个综合的单元测试套件)将帮助您防止破坏性的更改。 |
2
3
埃里克·埃文斯在书中讨论的“反腐败层”可能是一个有用的想法。 Domain Driven Design -这个模式的主要动机是将你的系统与另一个系统的变化(和特性)隔离开来。 |
3
2
您提到代码用于测试自定义硬件。您的代码(即测试例程)也会改变吗?您的代码将在今天测试一个圆,明天测试一个三角形,还是每天都在不断发展的相同的基本圆? 如果有一个常数点在周围移动,那么我将从那里开始,为每个版本的API和数据模型编写包装器,这些包装器将根据其他答案中建议的技术链接到中心。 但是,如果没有不变点,一切都在移动,那么我就放弃这个项目!这是不可能的! |
4
1
您的API/数据模型是否为您提供元数据?如果是这样,那么最好使用它使代码尽可能独立于API更改。例如,如果您有机会通过使用数据模型模式生成数据模型访问例程,那么应该这样做。当然,这只对某些类型的操作有意义。 |
5
0
编写自己的包装器,以便在代码和不受控制的内容之间进行接口。然后,您可以根据包装器公开的API编写代码,只需担心包装器本身的互操作性。 |
6
0
您最好的选择是让您公开的API需要一个版本号来加入请求。这样就可以选择要创建的正确对象。最坏的情况是,每一个变化都会中断,最终你会得到几十个类。最好的情况是,您的设计可以处理它,并且您只能偶尔使用单独的类。继承权可能会成为你在这件事上的朋友。最重要的是,如果需要与快速变化的API保持100%的向后兼容性,那么基本上就是拧了。您要么最终得到一个巨大的不可维护类,要么得到几个对版本控制做出正确响应的类。 |
7
0
1)大量单元测试。 每当您编写一段代码时,都要为代码发布许多单元测试,将来的版本必须通过这些测试才能签入。 确保测试是基于功能需求的,即不是函数的编写方式,而是为了不破坏其他代码而必须做的事情。 这将帮助人们签入破坏其他代码的更改。 2)要求所有API和数据模型有良好的正式规范。这确保了它们的设计更为仔细,并且在没有思想或理由的情况下,不会随意地进行更改。 |
92AlanC · 向后兼容的setOnDateSetListener 7 年前 |