我目前正在开发一个用于政府土地规划的网络应用程序。应用程序主要在浏览器中运行,使用ajax加载和保存数据。
我先做初步发展,然后毕业(这是一份学生工作)。在此之后,团队的其他成员将根据需要添加偶尔的特性。他们知道如何编码,但他们大多是土地规划专家。
考虑到Javascript技术变化的速度,我如何编写20年后仍能工作的代码?具体来说,我应该使用(或避免)哪些库、技术和设计思想来验证我的代码?
发布于 2016-10-13 09:50:22
规划这样一个生命周期的软件是很困难的,因为我们不知道未来会是什么。背景: Java于21年前于1995年出版。XmlHttpRequest最初是作为Internet 5的专有扩展出现的,它于1999年出版,17年前出版。它花了大约5年的时间,才在所有主要浏览器上都可以使用。你努力向前看的20年正是富web应用程序存在的时间。
从那以后,有些事情肯定没有变化。已经进行了很强的标准化工作,而且大多数浏览器都很好地符合所涉及的各种标准。一个在15年前跨浏览器工作的网站仍将同样工作,前提是它是针对所有浏览器的公共子集而工作的,而不是因为它为每个浏览器都使用了变通方法。
其他东西来来去去--最突出的是闪光灯。Flash有各种各样的问题导致了它的灭亡。最重要的是,它由一家公司控制。而不是在Flash平台内部的竞争,闪存和HTML5之间的竞争-和HTML5赢了。
从这段历史中,我们可以收集到几条线索:
当今的JavaScript世界是相对不稳定的,有大量的库和框架。然而,在20年内,它们几乎都不会起作用--我确信到那时仍将使用的唯一“框架”是Vanilla JS。
如果您想使用库或工具,因为它确实使开发更加容易,那么首先要确保它是建立在当今支持良好的标准之上的。然后,您必须下载库或工具,并将其包含在源代码中。您的代码存储库应该包含系统可运行所需的所有内容。任何外在的东西都是一种依赖,将来可能会崩溃。一个有趣的测试方法是把你的代码复制到一个拇指驱动器上,转到一台新的计算机上,使用不同的操作系统,断开它与互联网的连接,看看你是否能让你的前端工作。只要您的项目由普通的HTML+CSS+JavaScript和一些库组成,您就有可能通过。
发布于 2016-10-13 12:23:20
阿蒙先前的回答很棒,但是还有两点没有提到:
click事件,而不知道tap事件也很重要的话,最终就根本无法工作。发布于 2016-10-13 15:24:04
你不打算维持20年。朴素而简单。相反,你把你的目标转移到分隔化。
你的应用数据库不可知吗?如果你现在必须转换数据库,你能不能。你的逻辑语言不可知论。如果你现在必须用一种全新的语言重写这个应用程序,你会吗?你是否遵循好的设计准则,如SRP和DRY?
我的项目寿命超过20年,我可以告诉你,事情变了。就像弹出式。20年前你可以依靠弹出,今天你不能.XSS不是20年前的事情,现在你必须考虑CORS。
因此,您要做的是确保您的逻辑很好地分开,并且避免使用任何将您锁在特定供应商的技术。
这有时是非常棘手的。例如,.NET很擅长于公开逻辑和方法,因为它的MSSQL数据库适配器在其他适配器中没有等效项。MSSQL现在看起来可能是个不错的计划,但它会持续20年吗?谁知道呢。如何绕过这个示例,使数据层与应用程序的其他部分完全分离。然后,最坏的情况是,您只需重写整个数据层,应用程序的其余部分就不会受到影响。
换句话说,把它想象成一辆汽车。你的车撑不了20年了。但是,有了新的轮胎、新的引擎、新的变速器、新的窗户、新的电子产品等,同一辆车可以在路上走很长时间。
https://softwareengineering.stackexchange.com/questions/333487
复制相似问题