重构经典ASP的最佳实践?

时间:2008-08-23 02:56:38

标签: asp.net-mvc coding-style refactoring

我必须在一个大的,旧的,意大利面条的ASP系统中做一些重要的开发。我已经远离ASP很长一段时间,专注于Rails开发。

我采取的一个基本步骤是使用有意义的名称将页面重构为子函数和函数,这样至少可以很容易地理解文件顶部的内容。

ASP是否有值得的MVC框架?或者至少如何从视图中获取业务逻辑的最佳实践? (我记得在当天做了很多包括 - 还是这样做的吗?)

我也希望得到一些针对业务逻辑的单元测试,但也许我的要求太多了?

更新

项目中有超过200个ASP脚本,长达数千行;)UGH!

我们可能选择“大改写”,但在那之前,当我更换页面时,我想花一点时间清理意大利面。

8 个答案:

答案 0 :(得分:11)

<强>假设

Classic ASP系统的文档非常简单。

管理层并不是在寻找重写。

由于你在rails上做过ruby,你的(VB / C#)ASP.NET最多可以通过。

我的经历

我也继承了一个经典的ASP系统,这个系统被ex excel-vba类型肆无忌惮地打了起来。有很多这样的东西<font size=3>crap</font>(有时缺少结束标签; Argggh!)。在2。5年的过程中,我添加了一个安全系统,一个公共库,CSS + XHTML,并且能够强制验证xhtml1.1(不幸的是没有适当的mime类型),并且构建了一个相当强大且无情的报告系统。每天由80位用户使用。

我使用了jEdit和cTags(如上面jamting所述)和一堆其他插件。

我的建议 尝试创建一个主包含文件,从中导入所有常用的东西。像登录/注销,数据库访问,Web服务,javascript库等

的东西

使用课程。它们是超原始的(没有遗传),但是如果说是堵塞,它们可以很方便。

正确缩进脚本。

注释

编写外部架构文档。我个人使用LyX,因为生成格式精美的pdf已经死了,但你可以使用你喜欢的任何东西。如果您使用wiki,请安装graphviz加载项并使用它。制作易于修改的快速图表非常容易。

由于我不知道增强功能需要多大,我建议有一个好的高级到中级架构文档在规划增强功能时非常有用。

在业务逻辑单元测试中,我发现唯一有效的方法是在asp中设置一个xml-rpc监听器,它导入主库并在任何主库的子包含中公开函数(不是子程序) ,然后单独构建一个语言的单元测试系统,更好地支持通过xml-rpc调用ASP函数的东西。我使用python,但我认为Ruby应该这样做。 (那有意义吗?)。很酷的是,编写软件的单元测试部分的人甚至不需要查看ASP代码,只要他们对要调用的函数有不错的描述,所以他们可以是你身边的人。

在sourceforge有一个名为aspunit的项目,但最后一个版本是在2004年,它被标记为非活动状态。从未使用它,但它是纯粹的vbscript。粗略地看一下代码告诉我,看起来作者知道他们在做什么。

最后,如果您需要帮助,我可以进行合同远程办公工作(可能最多8小时/周)。按照链接跟踪获取联系信息。

祝你好运! HTH。

答案 1 :(得分:3)

由于完全重写工作系统可能非常危险,我只能给你一个小技巧:在项目上设置繁琐的标签,ctags。这样你就可以跳转到函数的定义和sub easy,我认为这有很多帮助。

将逻辑与“观点”分开。 VBScript支持带类的som类OO。我倾向于编写类,这些类执行我在asp页面上包含的逻辑,该逻辑充当“视图”。然后我将视图与用户名:&lt;%= MyAccount.UserName%&gt;等类挂钩在一起。 MyAccount类也可以使用以下方法:MyAccount.Login()等等。

有点原始,但至少你可以封装一些代码并将其隐藏在HTML中。

答案 2 :(得分:2)

我的建议是继续进行重构,经典的ASP支持类,所以你应该能够将除显示代码之外的所有内容移动到包含类的ASP文件中。 请参阅本文详细介绍从旧式asp转向ASP.NET的详细信息

Refactoring ASP

关于未来的发展方向,我不打算使用ASP.NET Web表单,而是选择Microsoft的新MVC框架作为ASP.NET的附加组件。从经典版本迁移到此将更加简单ASP。

答案 3 :(得分:2)

我使用ASPUnit对我们的一些经典ASP进行单元测试,并发现它很有帮助。它可能很旧,但ASP也是如此。这很简单,但它确实有效,您可以根据需要自定义或扩展它。

我还发现Michael Feathers的Working Effectively with Legacy Code是一个有用的指南,可帮助您找到解决某些旧代码的方法。

包含文件可以提供帮助,只要您保持简单。有一次,我尝试为每个课程创建一个包含,并且效果不佳。我喜欢有一些主要包含通用业务逻辑,对于复杂页面,有时包含每个页面的逻辑。我想你可以用类似的设置做MVC。

答案 4 :(得分:1)

你有没有机会从ASP转向ASP.Net?或者您是否希望将其保留在经典ASP中,而只是将其清理干净。如果可能的话,我会建议尽可能多地移动到.Net。看起来你可能正在重写/重组很多代码,所以转移到.Net可能不会付出太多额外的努力。

答案 5 :(得分:1)

据推测,其他人编写了您正在维护的大部分或全部系统。寻找通常的坏习惯(重复代码,范围太广的变量,if语句嵌套等),并像任何其他语言一样重构。请留意同一文件或不同文件中的重复内容,并将其抽象为函数。

如果代码是由不同的人编写/维护的,则可能存在编码风格不一致的问题。我发现将代码重新排列后,可以更容易地看到可以重构的内容。

“数千行长”让我怀疑可能还存在与同一页面上显示松散相关的事物的情况。再次,您希望将它们抽象为单独的子例程。

最终你想要编写对象以帮助封装数据库连接等内容,但是在你到达那里之前会有一段时间。

答案 6 :(得分:0)

这是非常古老的,但无法抗拒加我的两分钱。如果必须重写,必须继续使用经典的ASP:

  • 使用JScript!更强大,你得到了继承,并且有一些好的附带好处,比如使用与客户端相同的服务器端验证方法
  • 你绝对可以做MVC - 我写了一个MVC框架,并没有那么多行代码
  • 您还可以通过一些工作自动生成模型类。我有一些非常好的代码
  • 确保您正在进行参数化查询,并始终返回断开连接的记录集

答案 7 :(得分:0)

软件开发项目管理实践表明,像这样的软件需要退休。

我知道做正确的事情是多么困难,当负责任的经理知道什么事情并且害怕除了可能的方式以外的所有事情时,更是如此。

但是仍然。有必要开始开发新软件。永远不可能永远保持这一点,他们等待退休的人更糟糕。

如果您没有正确的规范/要求文档(我认为世界上没有任何asp软件,鉴于这些编码器的noobatry功能),您将需要一组知道软件功能的用户和经理负责验证要求。您需要查看每个功能并记录其要求。

在此过程中,您将了解有关软件及其业务的更多信息。一旦你有足够的信息,你就可以开始开发一个新信息了。