我最近一直在玩 PostSharp,它让我想起了几年前我遇到的一个问题:客户的开发人员已经制作了一个 Web 应用程序,但他们没有太多考虑如何管理状态信息 - 存储它(不要问我为什么)静态地在 IIS 中的 Application 实例上。毋庸置疑,该系统无法扩展,并且存在严重缺陷和不稳定。但这是一个庞大且非常复杂的系统,因此重新开发它的成本令人望而却步。我当时的简介是尝试重构代码库以在组件之间施加适当的解耦。
当时我尝试使用某种抽象机制来拦截对静态资源的所有调用,并将它们重定向到可以正确管理状态数据的组件。问题是大约有 1000 个复杂的引用需要重定向(我没有太多时间去做)手动编码(即使使用 R#)被证明太耗时了——我们废弃了代码库并正确地重写它。重写花了一年多的时间。
我现在想知道的是 - 如果我可以访问程序集重写器和/或面向方面的编程系统(例如 PostSharp),我是否可以轻松地自动化查找直接引用并将它们转换为可以重定向的接口引用的重构过程由工厂自动供应。
有没有人使用 PostSharp 或类似系统来修复病态遗留系统?这些项目有多成功?事后你发现付出的努力是值得的吗?你会再做吗?
更新:有关更多讨论,请参阅此博客文章。