3

我最近一直在玩 PostSharp,它让我想起了几年前我遇到的一个问题:客户的开发人员已经制作了一个 Web 应用程序,但他们没有太多考虑如何管理状态信息 - 存储它(不要问我为什么)静态地在 IIS 中的 Application 实例上。毋庸置疑,该系统无法扩展,并且存在严重缺陷和不稳定。但这是一个庞大且非常复杂的系统,因此重新开发它的成本令人望而却步。我当时的简介是尝试重构代码库以在组件之间施加适当的解耦。

当时我尝试使用某种抽象机制来拦截对静态资源的所有调用,并将它们重定向到可以正确管理状态数据的组件。问题是大约有 1000 个复杂的引用需要重定向(我没有太多时间去做)手动编码(即使使用 R#)被证明太耗时了——我们废弃了代码库并正确地重写它。重写花了一年多的时间。

我现在想知道的是 - 如果我可以访问程序集重写器和/或面向方面的编程系统(例如 PostSharp),我是否可以轻松地自动化查找直接引用并将它们转换为可以重定向的接口引用的重构过程由工厂自动供应。

有没有人使用 PostSharp 或类似系统来修复病态遗留系统?这些项目有多成功?事后你发现付出的努力是值得的吗?你会再做吗?

更新:有关更多讨论,请参阅博客文章。

4

1 回答 1

4

你要的不是AOP,而是一个泛化AOP的程序转换系统。这些允许人们定义一组对代码库的自动修改,并可靠地执行它们。您无需手动修改 1000 个复杂的引用;相反,您想知道如何定义一个可以处理所有情况的转换,并让该工具为您可靠地应用它。

我不能代表您的 Web 应用程序,但我有两个具体的例子,我已经成功地应用了它。

1) 波音需要从根本上重组多达 6,000 个组件,每个组件都编码为一组协作的 C++ 类(通常总计 3-10K SLOC),从传统的分布式架构转变为每个通信元素都成为 CORBA 方面的功能的架构。使用我公司的 DMS 软件再造工具包,一个能够准确转换 C++ 的程序转换系统,我们实现了一个工具来执行这些更改。该工具平均修改了三分之一,但可以在大约 5 分钟内转换一个组件。最终的转换完成了 98%,需要一些适度的修饰,但比估计的 1 个人工月手动修改每个组件要有效得多。这最好被认为是工具实现的软件结构的大规模重新架构。您可以在技术论文中了解这一点:

Akers, R., Baxter, I., Mehlich, M. , Ellis, B. , Luecke, K.,案例研究:通过自动程序转换、信息和软件技术重新设计 C++ 组件模型 49(3):275- 291 2007。可从出版商处获得。

2) 美国空军有飞行的遗留系统。其中之一是 B-2 轰炸机,它装满了 1975 年世界上最好的微处理器。在这些代码中运行的代码是/曾经是 JOVIAL,这是在 Ada 成为最受欢迎的语言之前空军最喜欢的语言(在每个人都被淘汰之前,现在只有糟糕的语言被军方考虑用于软件工程)。代码运行飞机。OTOH,他们需要退出 JOVIAL,因为对微处理器的支持(例如 CPU 的物理可用性、开发工具,甚至是愿意学习 JOVIAL 的人)正在迅速减少。我们使用相同的 DMS 为他们构建了一个 JOVIAL-to-C 转换器,并完成了 100% 的转换,而从未能够看到原始代码(黑色程序......)参见B-2 轰炸机转换了解更多详情。正如我们所说,B-2 正在使用转换后的软件进行升级。

现在,这两种情况都需要一些手动时间来配置转换。但与手工完成这项工作的估计成本相比,配置工作量很小。

所以,是的,如果您了解如何使用这些工具,它们会很好地工作,的,我们绝对打算再次使用它们。

于 2009-10-09T04:05:24.373 回答