遗留系统令人不适但常常很有价值,它们驱动着业务。重构、替换或退役的决策必须由成本和价值驱动,而不是对旧代码的厌恶。"它很旧又难看"不是理由;"它在花我们的钱"才是。
决策指南
text
REFACTOR (improve in place) when:
- Core logic is sound; it's holding business value
- Problems are localized; you can improve incrementally
REPLACE (rewrite/migrate) when:
- It blocks important work and can't be incrementally fixed
- Maintenance cost > rebuild cost over a sensible horizon
- It's a growing security or reliability liability
RETIRE (remove entirely) when:
- Its value no longer justifies any maintenance cost
- Usage has dwindled; a simpler path exists
警惕重写陷阱
完全重写很诱人,但往往是灾难性的,它们耗时比预期更长,重新引入旧错误,而正在运行的系统在此期间腐烂。优先采用增量重构或绞杀者模式替换。只有在增量路径确实不可行时,才考虑完全重写。
一个具体例子
一个整体应用令人头疼但运行良好,且不是你的瓶颈,那就重构最坏的模块,不要重写。但一个运行在数据库版本上的系统,该版本明年将失去安全支持,又没有升级路径,这是强制替换,你要精心计划。
