Python 如果决定我们的系统需要大修,那么最好的方法是什么?

Python 如果决定我们的系统需要大修,那么最好的方法是什么?,python,asp-classic,vbscript,Python,Asp Classic,Vbscript,我们正在维护一个基于经典ASP的web应用程序,使用VBScript作为主要语言。我们一致认为我们的后端(框架,如果你愿意的话)已经过时,并且没有为我们提供适当的工具来快速前进。我们几乎已经接受了当前遍布各地的webMVC模式,并且不能用当前的技术以合理的方式做到这一点。缺少的主要功能是使用继承进行适当的分派和模板化 目前正在讨论两种途径: 使用JScript将现有应用程序移植到经典ASP,这将使我们能够顺利地从那里移植到.NET MSJscript,并最终在.NET平台上运行(在我们看来,MV

我们正在维护一个基于经典ASP的web应用程序,使用VBScript作为主要语言。我们一致认为我们的后端(框架,如果你愿意的话)已经过时,并且没有为我们提供适当的工具来快速前进。我们几乎已经接受了当前遍布各地的webMVC模式,并且不能用当前的技术以合理的方式做到这一点。缺少的主要功能是使用继承进行适当的分派和模板化

目前正在讨论两种途径:

  • 使用JScript将现有应用程序移植到经典ASP,这将使我们能够顺利地从那里移植到.NET MSJscript,并最终在.NET平台上运行(在我们看来,MVC的工作最好在那时完成,ASP.NET并不比现在好多少)。这被认为是比下一种选择更安全、风险更小的方法,尽管可能需要稍长的时间
  • 使用其他一些技术完全重写应用程序,目前该软件包的领导者是PythonWSGi,它具有自定义框架、ORM和良好的模板解决方案。即使是django和其他预构建的解决方案,这里也有回旋余地。这种方法有望成为最快的解决方案,因为我们可能会在实际产品旁边运行测试版,但如果我们不能/不正确地进行测试,它确实可能会浪费大量时间
  • 这并不意味着我们的逻辑消失了,因为我们多年来所建立的是相当稳定的,正如所指出的那样,只是很难处理。它构建在SQL Server 2005上,大量使用存储过程,并发布在IIS 6上,只是为了提供更多的背景信息


    现在,问题来了。有人走过上面两条路中的任何一条吗?如果是这样的话,它成功了吗,它怎么可能更好,等等。我们不希望偏离这两件事中的一件,但是一些建议或其他解决方案可能会有帮助。

    将此作为删除未使用功能的机会!一定要用新的语言。称之为2.0。重建您真正需要的80%的It将少很多工作

    首先,把你的大脑从整个应用程序中抹去。坐下来列出它的总体目标,然后根据使用的功能决定需要哪些功能。然后根据这些特性重新设计它,然后构建


    (我喜欢删除代码。)

    我不推荐使用JScript,因为这绝对是一条人迹罕至的道路。 ASP.NET MVC正在迅速成熟,我认为您可以开始迁移到它,同时随着ASP.NET MVC框架的最终完成,在ASP.NET MVC框架上逐步升级。
    另一种选择是使用ASP.NET w/Subsonic或NHibernate。无论你做什么,看看你是否能遵循一个计划,不必在一次大爆炸中移植应用程序。抛开一切,从头开始是很有诱惑力的,但如果你能设法逐步做到这一点,你所犯的错误就不会花那么多钱,也不会引起那么多恐慌。

    结果比你想象的要好

    最近,我在一个可怕的旧C代码集合上做了一个大型的逆向工程工作。逐个函数我将仍然相关的特性重新分配到类中,为类编写单元测试,并构建一个看起来像替换应用程序的功能。它在类中有一些原始的“逻辑流”,有些类设计得很糟糕[主要是因为全局变量的子集太难区分。]

    它通过了类级别和整个应用程序级别的单元测试。遗留源代码主要用作一种“C语言规范”,以找出真正模糊的业务规则

    去年,我写了一个项目计划来替换30年前的COBOL。客户倾向于Java。作为计划工作的一部分,我使用Django在Python中原型化了修改后的数据模型。我可以在完成计划之前演示核心事务

    注意:在Django中构建模型和管理界面比整体规划项目更快

    由于“我们需要使用Java”的心态,最终的项目将比完成Django演示更大、更昂贵。没有真正的价值来平衡成本

    此外,我还为一个需要成为web应用程序的VB桌面应用程序做了相同的基本“Django原型”。我在Django中构建了模型,加载了遗留数据,并在几周内启动并运行。我使用该工作原型来指定其余的转换工作

    注意:我有一个正在工作的Django实现(仅限于模型和管理页面),我用它来计划其余的工作


    在Django中进行这种原型设计的最好之处在于,您可以随意处理模型、单元测试和管理页面,直到您将其正确。一旦模型正确,你就可以把剩下的时间用来摆弄用户界面,直到每个人都满意为止。

    不要扔掉你的代码

    这是你能犯的最严重的错误(在一个大的代码库上)。看

    您在旧代码上投入了大量精力,并解决了许多bug。扔掉它是一个典型的开发人员错误(我已经犯过很多次)。它让你感觉“更好”,就像春季大扫除。但是你不需要买一套新公寓和所有新家具来装点你的房子。你可以一次处理一个房间。。。也许有些东西需要一个新的油漆工。因此,这就是重构的用武之地

    有关应用程序中的新功能。重写这段新代码时,您将被迫使用模块化。当你有时间的时候,把旧代码的一部分也重构成C语言,然后一边工作一边解决bug。最后,,