什么时候会放弃向后兼容,而支持新的和改进的接口实现?[关闭]


11

我在同一家软件公司工作了十多年。结果,我已经使用各种面向对象的编程语言实现了大型代码库。当我刚开始我的职业生涯时,我是一名初学者,对良好的界面和类设计原则了解不多。我想认为我的设计技能已经随着时间的推移而得到了提高,但是由于对后向兼容性的考虑,现在在改进我的早期代码方面面临越来越多的困难。我的代码已被许多客户用作我公司销售产品的一部分。

我的问题是:什么时候应该停止尝试保持旧接口的向后兼容性并硬着头皮去支持实现一种全新的设计?

我认为,保持向后兼容性成为一个沉重的负担,以致无法对接口进行有用的更改。有谁遇到过类似的问题,谁可以提供一些反馈?


3
I think there comes a point where keeping backward compatibility becomes such a big burden that useful changes to interfaces become impossible.-我想您在那儿回答了自己的问题...
yannis 2011年

(1)这是商业广告吗?(2)为了使用接口/实现,客户是否连续支付支持费用?(相对于一次性付款)
rwong 2011年

我从事商业软件的开发工作,客户需要为首次购买支付费用,如果他们希望保持维护,则需要付费。
卡夫卡2011年

Answers:


5

虽然“何时”是一个很好的问题,但我认为“如何”更为相关。很难以不让用户感到沮丧或不满意的方式进行过渡性转换。需要考虑的一些项目:

  • 在进行任何过渡之前,请与您的客户/客户进行沟通。说明为什么以及如何实施。将安全性,性能,稳定性和将来的灵活性作为理由都是有效的。
  • 如果您还是要休息一下,请征求反馈。
  • 如果有任何第三方开发人员,请确保在合理的范围内也包括他们的输入。
  • 如果可能,请提供一个兼容层。
  • 提供全面的升级指南。
  • 尽可能轻松轻松地进行升级。减轻用户的痛苦,即使这意味着您需要做更多的工作。
  • 如果您收费,请提供升级到新版本的折扣。
  • 在新版本中至少添加一些新功能和有用功能,以激励升级。这对于使升级对管理人员更具吸引力尤其重要。
  • 如果您确实要休息一下,请在上一次需要时休息一下。这意味着需要事先进行全面的计划,并确保正确设置所有内容。
  • 如果您有UI,请轻松进行更改。考虑刷新而不是重新设计。对于非技术用户,从一个版本到另一个版本的剧烈UI更改可能是造成挫败感的主要原因。
  • 您的新版本应该比旧版本更加稳定和高效。不要给您的用户重新升级的理由。未经事先广泛测试(单元测试,集成测试和Beta测试),请勿发布新版本。
  • 同时长时间维护旧版本。如果您决定逐步淘汰并终止支持,请至少提前6-12个月通知您,如果可以的话,请给予更多通知。
  • 您能负担得起同时维护两个版本的财务和人力吗?(而且,从业务角度来看,您应该停止失去对旧版本的支持,直到您有能力失去那些坚持使用旧版本并且不希望升级的其余客户为止。那一点应该是您的成本保持它超过您从中获得的利润。)
  • 如有必要,请在旧版本停止使用后的一段时间内进行安全更新。
  • 同样,整个过程中的沟通都是巨大的。任何时候都不要让您的用户/客户/客户感到被抛弃。他们的忠诚和热情是您业务的基础。确保您在博客或论坛中回答他们的问题。社会因素不应低估。

至于“何时”,您可能比其他任何人对您的应用程序都有更好的主意。但是,总的来说,当您的技术债务和体系结构完全抑制稳定性,阻止合理的性能并使新功能的开发势不可挡或不必要地困难时,可能应该彻底休息。

话虽如此,不要轻易采取这一步骤。即使做得对,打破向后兼容性也很重要。在考虑休息之前,您应该强烈考虑增加测试范围并首先进行重构,如果可能的话,进行重构。


1
+1:务实的解决方案。毕竟,问题很明确,“我认为保持向后兼容性成为一个沉重负担,以致无法对接口进行有用的更改。” 由于是这种情况,因此有必要就如何向前发展提供具体指导,以解决此问题。
S.Lott

2

总的来说,我同意詹姆斯·安德森的观点。但是,根据我的经验,可能需要考虑其他方面,并且可能指向确实允许不断发展的接口的选项。

此示例来自与我合作的团队之一。他们定期发货,每月至少一次,有时甚至每周一次。鼓励客户进行升级,因为只有新版本才支持新功能和新平台。升级很容易,客户甚至可以跳过这两个版本。不支持降级。此外,仅支持3年的版本。之后,有一年的宽限期,维护费将翻倍。

结果,绝大多数-大约95%的客户-至少每年一次定期进行升级。这也意味着您可以逐步引入新的界面。

旧界面如何?该团队使用的技术是将旧的接口声明为“报废”。然后有一个12个月的时间段,其中新界面可用,而旧界面尚未退役。新界面比旧界面提供更好的功能,因此有两个诱因:旧界面报废和新界面要好得多。

在这种情况下,具体的旧界面是平台特定的技术,正在逐步被基于标准主流技术的服务界面所取代。

当然,这种更改不会在一夜之间发生,并且需要很多年才能完成。但是,它允许停止对旧技术的投资,而转而投资于新技术。我们会为客户提供帮助,并有前进的道路。他们中的大多数人也欢迎朝着更新技术的方向发展。

但是请记住,这种特定方法可能不适用于您的情况。对于与我一起工作的团队来说,确实可以。



1

简短的答案是永不!

经验表明,向后兼容性下降至少会打扰客户和用户,更糟糕的是会完全失去他们。

如果您要用户重写代码,则在他们和您的所有后代惯常进行诅咒之后,他们会认为“如果无论如何我都必须重写,也许我应该切换到我一直在阅读的漂亮ACME库那么多?”。

诀窍是要么以不破坏向后兼容性的方式增强当前界面,要么提供一个全新的闪亮且明显优越的界面,同时保持较旧的界面。在某些时候,新界面中将具有一些旧界面中无法提供的功能,但是,这仅是激励人们采取行动的动力,而不会造成问题。

编辑以进一步阐明这一点。

您作为程序员的想法是-

“我将改进此API,使系统尽可能的好,每个人都会钦佩我”。

您的API用户会想到的是-

“ A * ** e他认为我的时间和时间表并不重要。我必须停止我正在做的事情,并重构我的所有代码,除了满足他的自我之外,没有其他原因。如果我必须重构,那么我将切换另一个API只是为了坚持下去。”


1
添加了“思考”来强调愤怒的强迫性改变会给人带来多大的伤害!
詹姆斯·安德森

1
决不?天哪 Microsoft似乎在Windows的每个主要版本中都违反了这一原则。我认为实际上根本没有遵循“从不”。似乎“很少”,“小心”或“勉强”比“从不”更好。问题确实说:“我认为保持向后兼容性成为一个沉重负担,以致无法对接口进行有用的更改。” 您能解决这个特定问题吗?
S.Lott

@ S.Lott使用不必要的强力词(例如“ 永不”,当您真正表示很少时)是典型的Joel Spolsky效果:)
maple_shaft

2
@ S.Lott:我们在谈论同一个微软吗?Microsoft的最新操作系统仍然可以运行为第一个程序编写的大多数程序吗?Microsoft是否已将代码添加到新的操作系统中,以确保依赖旧版本未指定行为的流行游戏仍然可以正常工作?
Michael Borgwardt

-1:有些客户比他们所值的贵。
Jim G.

0

实际上,这实际上是业务决策,而不是技术决策。通常,这是作为主要版本的一部分完成的(例如,从版本3.5到版本4.0),并且经常会同时并行支持两个版本。这意味着您将对旧版本进行维护,但是所有新功能仅会出现在新版本中。只要公司从中获利,或者至少足以抵消维护成本,就支持旧版本。准备将其介绍给管理层。


0

我一直在这方面的客户方面,所以我要说的是,这实际上取决于您计划如何进行过渡。

我们目前正在升级我们的帐户系统。进行升级的公司还支持以前的不兼容版本。他们计划获取数据并将其移至新系统,以便(理论上)所有旧数据都将存在。我们将为数据转换支付几百英镑。没问题。

与我以前在anothe rcompany工作的情况相比。供应商无法从旧系统过渡到新系统。这使他们和其他供应商一样处于同样的境地。实际上,他们的情况更糟,因为我们知道他们没有致力于帮助我们进行升级。他们没有得到新合同。

您已经完成了获得和留住客户的艰苦工作,如何才能轻松过渡?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.