重构经典ASP的最佳做法?

时间:2020-03-05 18:42:20  来源:igfitidea点击:

我必须在一个大型的,古老的,意大利面条缠身的ASP系统中进行一些重要的开发。我已经离开ASP很长时间了,将精力集中在Rails开发上。

我已采取的一项基本步骤是将页面重构为具有有意义名称的子函数和子函数,以便至少可以轻松理解@文件顶部的一般情况。

是否有一个针对ASP的有价值的MVC框架?或者关于至少如何摆脱业务逻辑的最佳实践? (我记得当初做过很多包含操作-还是那样做吗?)

我也想对业务逻辑进行一些单元测试,但是也许我要的太多了?

更新:

该项目中有200多个ASP脚本,几千行长;)啊!

我们可能会选择"大重写",但是直到那时,当我要更改页面时,我想花一些额外的时间来清理意大利面。

解决方案

回答

我们是否有可能从ASP迁移到ASP.Net?或者,我们是否打算将其保留在经典ASP中,而只是对其进行清理。如果可能的话,我建议尽可能多地迁移到.Net。看来我们可能仍在重写/重新组织许多代码,因此,移至.Net可能并不需要很多额外的精力。

回答

由于完全重写操作系统非常危险,因此我只给我们一个小提示:在项目中设置丰富的标签,ctags。这样,我们可以跳转到函数的定义和sub简易操作,我认为这很有帮助。

关于将逻辑与"视图"分开。 VBScript通过类支持som类的OO。我倾向于编写类,这些类执行包含在作为"视图"的asp页上的逻辑。然后,我将视图与类似Username的类挂钩:<%= MyAccount.UserName%>。 MyAccount类还可以具有以下方法:MyAccount.Login()等。

有点原始,但至少我们可以封装一些代码并将其从HTML隐藏起来。

回答

大概是其他人编写了我们现在维护的大部分或者全部系统。寻找通常的不良习惯(重复的代码,作用域范围太广的变量,if语句嵌套等),然后像其他任何语言一样进行重构。留意同一文件或者不同文件中的重复发生的事情,并将其抽象为函数。

如果代码是由不同的人编写/维护的,则可能会出现编码风格不一致的问题。我发现将代码重新放入行中可以更轻松地查看可以重构的内容。

"数千行"使我感到怀疑,在某些情况下也可能在同一页面上显示松散相关的内容。同样,我们希望将它们抽象为单独的子例程。

最终,我们希望编写对象来帮助封装诸如数据库连接之类的内容,但是要到达那里还需要一段时间。

回答

假设条件

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

管理层不寻求重写。

由于我们一直在做红宝石,因此(VB / C#)ASP.NET最多可以通过。

我的经验

我也继承了一个经典的ASP系统,该系统被ex excel-vba类型随意组合在一起。有很多这样的东西" <font size = 3>废话</ font>"(有时会丢失结束标记; Argggh!)。在2.5年的时间里,我添加了一个安全系统,一个公共库CSS + XHTML,并且能够强制执行此操作以验证xhtml1.1(不幸的是,它没有适当的mime类型),并且构建了一个相当健壮和富饶的报告系统每天有80位用户使用。

我使用了带有cTags的jEdit(如上面的干扰所述)和一堆其他插件。

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

使用类。它们是超原始的(无继承),但正如jaming所说,它们可以很方便。

正确缩进脚本。

评论

编写外部体系结构文档。我个人使用LyX,因为它死于生成格式精美的pdf,但是我们可以使用任何我们喜欢的东西。如果我们使用维基,请安装并使用graphviz加载项。快速创建易于修改的图表非常容易。

由于我不知道需要多少实质性的增强,因此我建议拥有一份良好的高级到中级体系结构文档对于计划增强将非常有用。

在业务逻辑单元测试中,我发现唯一可行的方法是在asp中设置xml-rpc侦听器,该侦听器导入主库并公开任何主库的子包含项中的函数(虽然不是子例程),然后用一种语言更好地支持通过xml-rpc调用ASP函数的语言来构建单元测试系统。我使用python,但我认为Ruby应该可以解决问题。 (那有意义吗?)。很棒的事情是,编写软件的单元测试部分的人甚至不需要查看ASP代码,只要他们对要调用的函数有不错的描述,因此他们可以是我们身边的人。

sourceforge有一个名为aspunit的项目,但上一个版本是2004年,被标记为非活动状态。从未使用过它,但是它是纯vbscript。粗略地看一下代码,就可以看出作者似乎知道自己在做什么。

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

祝你好运! HTH。

回答

我的建议是进行重构,经典的ASP支持类,因此我们应该能够将除显示代码之外的所有内容移动到包含ASP的文件中,这些文件只包含类。
请参阅本文的详细信息,从老式的ASP过渡到ASP.NET

重构ASP

关于将来的方向,我不会针对ASP.NET Web表单,而是要使用Microsoft的新MVC框架(ASP.NET的添加组件)。从经典ASP迁移到此将更加简单。

回答

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

我还发现Michael Feathers的《有效处理旧版代码》是寻找如何测试某些旧代码的有用指南。

只要保持简单,包含文件就可以提供帮助。有一次我尝试为每个类创建一个包含,但效果不太好。我喜欢有几个具有共同业务逻辑的main包含,对于复杂的页面,有时每个这些页面都有一个逻辑包含。我想我们可以使用类似的设置来制作MVC。

回答

这已经很老了,但我忍不住加了我的两分钱。如果必须重写,并且必须继续使用经典ASP:

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