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

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

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

我也希望能够对业务逻辑进行一些单元测试,但也许我的要求太多了?

更新:

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

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

===============>>#1 票数: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(如上面的阻塞所述)和一堆其他插件。

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

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

正确缩进脚本。

评论

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

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

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

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

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

祝好运! HTH。

===============>>#2 票数:3

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

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

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

===============>>#3 票数:2

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

重构ASP

关于未来的发展方向,我不打算使用ASP.NET Web表单,而是将微软的新MVC框架作为ASP.NET的附加组件。从传统的ASP迁移到此将更加简单。

===============>>#4 票数:2

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

我还发现Michael Feathers的“有效使用遗留代码”是一个有用的指南,可帮助您找到解决某些旧代码的方法。

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

===============>>#5 票数:1

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

===============>>#6 票数:1

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

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

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

最终你想要编写对象来帮助封装像数据库连接这样的东西,但是在你到达之前会有一段时间。

===============>>#7 票数:0

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

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

===============>>#8 票数:0

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

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

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

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

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

  ask by ryw translate from so

未解决问题?本站智能推荐:

1回复

重构If语句的最佳方法

我有以下代码: 问题是我在检查addSetting.Property的地方有20个if-checks。 现在问题来了: 重构此if语句的最佳和最有效方法是什么?
1回复

在angularJS项目中编写验证方法的最佳实践

在Java中,我们有异常处理。 在这里我们可以编写用于处理验证并抛出适当异常消息的通用验证器方法。 以同样的方式,如何管理angularJS项目中多个控制器共有的验证器方法。 我在所有显示错误消息的html页面中都有一个通用div。 错误对象在每个控制器中定义。 在控制器中
3回复

我们可以重构这些方法吗?

我的课程实现方法如下: 有一个更好的方法吗? 这些代码让我感到不舒服。 编辑:抱歉不清楚的例子。 我正在用Hibernate实现GenericDao类,真正的代码是这样的:
2回复

简单的重构示例

给出以下代码: 需要更改它,并且可能不会返回布尔值,例如: 您是否应该确定它确实会返回布尔值或只是完全更改方法? 解决这类问题的正确方法是什么?
3回复

如何重构这个Ruby代码?

我创建了以下内容,该方法可以正常工作,但似乎很神秘。 有没有办法以更像Ruby或易于理解的方式编写它? 此方法删除数字以下的较低因素。 因此, 10.high_factors返回[6,7,8,9,10] 。 6被2整除,因此2被删除。 列表中没有大于6的倍数,因此保持不变。
2回复

重构好还是不好?

给出以下代码: 您认为以下内容将是有益的净重构吗? 如果要编辑更多案例或更多行组件怎么办?
10回复

你是小步重构吗?

在读了福勒的“重构”一段时间之后,我仍然经常发现自己“我应该用更小的步骤做到这一点。” - 即使我没有破坏我的代码。 小步骤重构是安全的,但成本时间。 这是速度和风险之间的权衡 - 我试图在选择我的重构方式时具有战略性。 尽管如此:大多数时候我正在以更大的步骤进行重构。 如果
1回复

重构测试代码的干净方法

背景 : 我目前正在为网络协议的客户端编写测试用例。 作为测试的一部分,我必须模拟服务器的几种不同的预期和意外响应(错误的标头,连接丢失,意外的消息,超时)。 每个测试用例都可以通过其唯一地址进行访问。 我的问题 : 当前的实现分为几个部分: 一个包含测试用例的所有地
2回复

在Rails中重构视图逻辑

这是我需要做的。 我有一个Tournament模型,该模型通过Signup (N:N)连接到User 。 Signup唯一添加的是Signup状态。 比赛有开始时间,用户只能注册,直到比赛开始前60分钟为止。 之后,注册用户可以签入。所以基本上,我有两种状态选择 简而言之,模型
4回复

功能Scala的重构/布局

这个班轮...... ...是我对Project Euler问题22的解决方案。 它似乎工作,它写在(我的尝试)功能风格。 这个例子有点极端,但我的问题更为笼统 - 您更喜欢编写/格式化/评论功能样式代码? 功能方法似乎鼓励了一系列方法调用,我发现这些方法调用不可读,而且放置注