16

我必须在一个大型的、旧的、意大利面条式的 ASP 系统中做一些重要的开发。我已经离开 ASP 很长时间了,我将精力集中在 Rails 开发上。

我采取的一个基本步骤是将页面重构为具有有意义名称的子程序和函数,这样至少在文件顶部很容易理解通常发生的事情。

ASP 有没有值得的 MVC 框架?或者如何至少从视图中获取业务逻辑的最佳实践?(我记得那天做了很多包含——这仍然是这样做的方式吗?)

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

更新:

项目中有超过 200 个 ASP 脚本,大约有数千行;)哎呀!

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

4

8 回答 8

13

假设

Classic ASP 系统的文档比较简单。

管理层不是在寻找重写。

由于您一直在使用 ruby​​ on rails,因此您的 (VB/C#) ASP.NET 充其量是可以通过的。

我的经验

我也继承了一个经典的 ASP 系统,它被 ex excel-vba 类型随意地拍打在一起。有很多这样的东西<font size=3>crap</font>(有时缺少结束标签;Argggh!)。在 2.5 年的时间里,我添加了一个安全系统、一个公共库、CSS+XHTML,并且能够强制验证 xhtml1.1(不幸的是,没有正确的 mime 类型),并构建了一个相当健壮和 ajaxy 的报告系统。每天有 80 位用户使用。

我使用了 jEdit,带有 cTags(正如上面的 jamting 所提到的和一堆其他插件。

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

使用类。它们是超原始的(没有继承),但正如 jamting 所说,它们很方便。

正确缩进脚本。

评论

编写外部架构文档。我个人使用 LyX,因为生成格式良好的 pdf 是很费脑筋的,但你可以使用任何你喜欢的东西。如果您使用 wiki,请安装并使用 graphviz 插件。制作可以轻松修改的快速图表非常容易。

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

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

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

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

祝你好运!HTH。

于 2008-09-13T08:13:51.920 回答
4

由于完全重写一个工作系统可能非常危险,我只能给你一个小提示:在你的项目中设置旺盛的标签,ctags。通过这种方式,您可以轻松跳转到函数的定义和 sub ,我认为这很有帮助。

关于将逻辑与“视图”分开。VBScript 支持某种带有类的 OO。我倾向于编写执行逻辑的类,这些逻辑包含在充当“视图”的 asp 页面中。然后我将视图与用户名之类的类挂钩:<%= MyAccount.UserName %>。MyAccount 类也可以有类似的方法:MyAccount.Login() 等等。

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

于 2008-08-23T22:20:00.483 回答
2

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

重构 ASP

关于未来的方向,我不会针对 ASP.NET Web 表单,而是会选择 Microsoft 的新 MVC 框架作为 ASP.NET 的附加组件)从经典 ASP 迁移到此会简单得多。

于 2008-11-05T12:14:47.570 回答
2

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

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

只要您保持简单,包含文件就会有所帮助。有一次,我尝试为每个类创建一个包含,但效果不太好。我喜欢有几个包含通用业务逻辑的主要包含,对于复杂的页面,有时每个页面都有一个包含逻辑的包含。我想你可以用类似的设置来做 MVC。

于 2008-11-15T21:27:24.060 回答
1

有没有机会从 ASP 迁移到 ASP.Net?或者您是否希望将其保留在经典的 ASP 中,但只是对其进行清理。如果可能的话,我建议尽可能迁移到 .Net。看起来您可能无论如何都在重写/重组大量代码,因此迁移到 .Net 可能不会付出太多额外的努力。

于 2008-08-23T17:46:22.390 回答
1

大概是其他人编写了您现在维护的大部分或全部系统。寻找通常的坏习惯(重复代码、范围太广的变量、嵌套的 if 语句等),并像对任何其他语言一样进行重构。注意同一文件或不同文件中重复出现的内容,并将它们抽象为函数。

如果代码是由不同的人编写/维护的,则可能存在一些编码风格不一致的问题。我发现将代码放回原处可以更容易地看到可以重构的东西。

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

最终,您希望编写对象来帮助封装诸如数据库连接之类的东西,但您还需要一段时间才能实现。

于 2008-09-13T05:04:50.157 回答
0

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

  • 使用 JScript!更强大,您可以获得继承,并且有一些很好的附带好处,例如使用与客户端相同的方法进行服务器端验证
  • 你绝对可以做 MVC - 我写了一个 MVC 框架,代码行数并不多
  • 您还可以通过一些工作自动生成模型类。我有一些运行良好的代码
  • 确保您正在执行参数化查询,并始终返回断开连接的记录集
于 2010-04-21T21:36:47.210 回答
0

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

我知道做正确的事有多难,当负责的经理知道 sht 并且害怕除了最糟糕的方式之外的所有事情时更是如此。

但还是。有必要开始开发新软件。永远保持这个是不可能的,而且他们等待退役的日志越糟。

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

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

于 2015-06-24T16:57:42.927 回答