[英]Best practices for refactoring classic ASP?
我必须在一个大的,旧的,意大利面条的ASP系统中做一些重要的开发。 我已经远离ASP很长一段时间了,我将精力集中在Rails开发上。
我采取的一个基本步骤是使用有意义的名称将页面重构为子函数和函数,这样至少可以很容易地理解@文件的顶部通常会发生什么。
ASP有一个有价值的MVC框架吗? 或者至少如何从视图中获取业务逻辑的最佳实践? (我记得在当天做了很多包括 - 仍然是这样做的方式吗?)
我也希望能够对业务逻辑进行一些单元测试,但也许我的要求太多了?
项目中有超过200个ASP脚本,长达数千行;)UGH!
我们可能会选择“重大改写”,但在那之前,当我在更换页面时,我想花一点时间来清理意大利面条。
假设
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(如上面的阻塞所述)和一堆其他插件。
我的建议尝试创建一个主包含文件,从中导入所有常用的东西。 登录/注销,数据库访问,Web服务,javascript库等等。
使用课程。 它们是超原始的(没有遗传),但是如果说堵塞,它们可以很方便。
正确缩进脚本。
评论
编写外部架构文档。 我个人使用LyX,因为生成格式精美的pdf已经死了,但你可以使用你喜欢的任何东西。 如果您使用wiki,请安装graphviz加载项并使用它。 制作易于修改的快速图表非常容易。
由于我不知道增强功能需要多大,我建议有一个好的高级到中级架构文档在规划增强功能时非常有用。
在业务逻辑单元测试中,我发现唯一有效的方法是在asp中设置一个xml-rpc监听器,它导入主库并在任何主库的子包含中公开函数(不是子程序),然后单独构建一个单元测试系统,使用一种语言,更好地支持通过xml-rpc调用ASP函数的东西。 我使用python,但我认为Ruby应该这样做。 (那有意义吗?)。 很酷的是,编写软件的单元测试部分的人甚至不需要查看ASP代码,只要他们对要调用的函数有不错的描述,所以他们可以是你身边的人。
在sourceforge有一个名为aspunit的项目,但最后一个版本是在2004年,它被标记为非活动状态。 从未使用它,但它是纯粹的vbscript。 粗略地看一下代码告诉我,看起来作者知道他们在做什么。
最后,如果您需要帮助,我可以进行合同远程办公工作(可能最多8小时/周)。 按照链接跟踪获取联系信息。
祝好运! HTH。
由于完全重写工作系统可能非常危险,我只能给你一个小技巧:在你的项目上设置繁琐的标签,ctags。 这样你就可以跳转到函数的定义和sub easy,我觉得这很有帮助。
论逻辑与“观点”的分离。 VBScript支持带类的som类OO。 我倾向于编写类,这些类执行我在asp页面上包含的逻辑,该逻辑充当“视图”。 然后我将视图与用户名:<%= MyAccount.UserName%>等类挂钩在一起。 MyAccount类还可以包含以下方法:MyAccount.Login()等。
有点原始,但至少你可以封装一些代码并将其隐藏在HTML中。
我的建议是进行重构,经典的ASP支持类,所以你应该能够将除显示代码之外的所有内容移动到包含类的ASP文件中。 请参阅此文章,了解从旧式asp转向ASP.NET的详细信息
关于未来的发展方向,我不打算使用ASP.NET Web表单,而是将微软的新MVC框架作为ASP.NET的附加组件。从传统的ASP迁移到此将更加简单。
我使用ASPUnit对我们的一些经典ASP进行单元测试,并发现它很有帮助。 它可能很旧,但ASP也是如此。 这很简单,但它确实有效,您可以根据需要自定义或扩展它。
我还发现Michael Feathers的“有效使用遗留代码”是一个有用的指南,可帮助您找到解决某些旧代码的方法。
只要您保持简单,包含文件就可以提供帮助。 有一次,我尝试为每个课程创建一个包含,并且效果不佳。 我喜欢有一些主要包含通用业务逻辑,对于复杂页面,有时包含每个页面的逻辑。 我想你可以用类似的设置做MVC。
你有没有机会从ASP转向ASP.Net? 或者您是否希望将其保留在经典ASP中,而只是将其清理干净。 如果可能的话,我会建议尽可能多地移动到.Net。 看起来你可能正在重写/重组很多代码,所以转移到.Net可能不会付出太多额外的努力。
据推测,其他人编写了您现在正在维护的大部分或全部系统。 寻找通常的坏习惯(重复代码,范围太广的变量,if语句嵌套等),并像任何其他语言一样重构。 留意同一文件或不同文件中的重复内容并将其抽象为函数。
如果代码是由不同的人编写/维护的,则可能存在编码风格不一致的一些问题。 我发现将代码重新排列后,可以更容易地看到可以重构的内容。
“数千行很长”让我怀疑是否可能存在与同一页面上显示松散相关的事物的情况。 再次,您希望将它们抽象为单独的子例程。
最终你想要编写对象来帮助封装像数据库连接这样的东西,但是在你到达之前会有一段时间。
这是非常古老的,但无法抗拒加我的两分钱。 如果必须重写,必须继续使用经典ASP:
软件开发项目管理实践表明,像这样的软件需要退休。
我知道做正确的事情是多么困难,当负责任的经理知道什么时候会更加困难,并且除了可能的方式之外还害怕所有事情。
但仍然。 有必要开始开发新软件。 永远不可能永远保持这一点,他们等待退休的情况更糟。
如果你没有正确的规范/要求文档(我认为世界上没有asp软件,考虑到那些编码器的noobatry hability),你需要一组知道软件功能的用户和一个经理才能负责验证要求。 您需要查看每个功能并记录其要求。
在此过程中,您将了解有关软件及其业务的更多信息。 获得足够的信息后,您就可以开始开发新的信息了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.