重构厚客户端遗留应用程序 我正在研究一个胖客户端遗留的C++应用程序,它有很多业务逻辑与事物的呈现方面混合。我想把事情清理干净,完全重构代码,这样就有了清晰的关注点分离。为了实现这一点,我正在研究MVC或其他合适的设计模式

重构厚客户端遗留应用程序 我正在研究一个胖客户端遗留的C++应用程序,它有很多业务逻辑与事物的呈现方面混合。我想把事情清理干净,完全重构代码,这样就有了清晰的关注点分离。为了实现这一点,我正在研究MVC或其他合适的设计模式,c++,model-view-controller,user-interface,design-patterns,mvp,C++,Model View Controller,User Interface,Design Patterns,Mvp,我想从以前走过这条路的人那里得到建议- 我是否使用MVP或MVC(或其他模式) 进行类似操作的最佳实践(即有用的步骤/检查)是什么?最有用的步骤是创建非常稳健和完整的回归测试集,无论您选择哪种模式 要在MVP和MVC之间进行选择,请在此问题中查看它们的差异: 如果MVP和MVC是你的主要问题,你可以自由选择 有三个因素会影响这个决定:您以前的经验、对框架/库的支持,以及哪一个更适合现有的代码库 在我的EXXRIENCE中,这两种模式都适合C++传统的应用程序,比如在婚礼蛋糕上的CAT PUKE。

我想从以前走过这条路的人那里得到建议-

我是否使用MVP或MVC(或其他模式)


进行类似操作的最佳实践(即有用的步骤/检查)是什么?

最有用的步骤是创建非常稳健和完整的回归测试集,无论您选择哪种模式

要在MVP和MVC之间进行选择,请在此问题中查看它们的差异:


如果MVP和MVC是你的主要问题,你可以自由选择

有三个因素会影响这个决定:您以前的经验、对框架/库的支持,以及哪一个更适合现有的代码库

在我的EXXRIENCE中,这两种模式都适合C++传统的应用程序,比如在婚礼蛋糕上的CAT PUKE。您面临的主要挑战是:

  • 没有破坏任何东西。见鬼,它可能不会破坏一切
  • 注意到你实际上正在前进
  • 通过不需要三个月重写某些组件的小更改来实现这一点

其余部分非常通用于处理遗留应用程序,与问题的细节无关。我会把它留在这里,因为你也有一个通用的部分

重写vs.重构你已经说明了你的决定,所以我只是提出了支持重写的论据来考虑:如果你有一个清晰的规范,并且了解当前用户如何使用这个应用程序,当30%或更多的代码需要更改时,重写可能会更快、更便宜。(这并不意味着“重写所有内容”,这可能还意味着只将应用程序缩减为逻辑,然后在其上植入一个新的表示层)

假设您选择重构:

定义你的目标你为什么需要重构应用程序?很好的理由可能是有很多新特性需要实现,表示层需要更换,或者为了保持理智而出现bug。从这一点出发,决定什么需要改变,什么可以保持现状

您已经选择了您的目标:MV*。我只是想让您考虑一下从长远来看对客户机和代码所有者的好处

阅读代码。不,真的,慢慢适应代码库。使用调试器逐步完成它。试着去理解所涉及的事情。记下你认为应该做的改进

创建测试-主要是针对当前所需行为的回归测试。对于遗留代码库,它们通常不是手动的,所以创建一个傻瓜可以遵循的测试协议,并尝试找到一个不那么傻瓜的人,他可以不时为您运行这些测试。尝试从现有用户那里获取一些用例

坚持小的、可逆的更改如果重构步骤出错,它应该足够小,可以毫不犹豫地扔掉。有时,这并不容易,我典型的最坏情况步骤是:
-决定要替换的功能。制定新代码应该是什么样子的计划。 -将现有代码移到同样适用于新代码的接口后面 -试验 -用新代码替换该功能 -试验 -有时,接口是“最终的”,有时您可以删除/减少它


始终改进不要接受“以后可以修复”的功能性挫折

您应该看看Michael Feathers的“有效使用遗留代码”。本书概述了如何将现有代码放入测试工具,以及如何安全地打破代码中的依赖关系。

术语是否从“胖客户端”更改为“胖客户端”?或者脂肪除了厚之外还有其他含义吗?@Ants:在这样的应用程序中,它一直是“脂肪”。你在想我认为的终端?GUI是用哪个框架或工具包实现的?我认为客户抱怨说他不胖,他只是有厚厚的骨头。