Web应用程序过于复杂。以下是简化它们的方法。
我相信我们可以更好地管理应用程序的复杂性。
我们当中很少有人意识到我们的决定会造成多少次级影响。
让我们看看随着时间的推移,复杂性是如何增长的。
静态时代
那时候很简单。我们只有 MySQL 数据库、业务逻辑和 HTML + CSS 视图。
所有内容都是静态的,浏览器的任务是显示内容、导航和提交表单。
我喜欢把测试工作量作为衡量代码简洁性的基准。代码共有三层。
业务逻辑层和持久层可以轻松集成,视图层可以在浏览器中进行测试。
维护这样的系统可能需要测试人员、开发人员和设计师。当然,由一个人负责所有这些工作也是可行的。
AJAX时代
JavaScript 的出现为用户体验的提升打开了新的大门。在 WordPress 网站上添加动态菜单、表单或日历,曾经是最酷炫的功能之一。
客户端的复杂度出现了激增。
许多浏览器的 JS 实现方式各不相同,这就催生了 jQuery 的出现。
这赋予了设计师很大的权力,并将更多的工程工作转移到了前端。JavaScript 使浏览器具有了可扩展性。
测试复杂度增加了吗?是的。每一段新的 JavaScript 代码都只能在浏览器中进行测试。
这需要团队具备测试、后端编程、JavaScript 和设计方面的专业知识。频繁切换服务器端和客户端语言令人沮丧。当时流行让不同的人分别负责服务器端和客户端的开发。
单页时代
还记得Angular.js应用程序的第一个示例吗?那个会自动更新div内容的输入框?美好的回忆。
欢迎来到单页应用时代,在这个时代,前端开发比后端开发更加复杂——这主要是因为相关的逻辑被转移到了客户端。结果,前端和后端之间的鸿沟越来越大,JavaScript 疲劳也随之而来。
我们最终得到了两个紧密耦合的应用程序。
要维持这种状态,您至少需要一位在测试、后端、前端开发(丰富的框架、工具和浏览器知识)和设计方面经验丰富的人员。
现在需要维护两个应用程序,代码量也比以往任何时候都多。你必须在前端和后端都维护单元测试、集成测试和端到端测试。出于安全考虑,业务逻辑现在无法直接访问。
前端和后端现在都需要维护负责通信的层。
客户端代码需要大量的 API 模拟来测试底层性能——DOM 测试非常消耗资源。
编排变得困难,因为必须确保部署同步。如果后端和前端团队是分开的,那就更难了。
别忘了浏览器测试,它与客户端集成测试也有很多重叠之处。此外,还需要考虑复杂性和权衡取舍等因素。
这导致代码量增加,进而再次增加了代码的复杂性。
SEO 变得棘手,但值得庆幸的是,生态系统通过服务器端渲染和水合作用解决了这个问题。
一些优秀的模式也已涌现。用户体验变得更好、更具创意。我们终于能够以可管理且可扩展的方式定义客户端逻辑。
我们现在都知道,我们想要的是成分,避免过多的副作用,以及无法控制的状态突变。
React 事实上已经成为一种标准。
简约复兴
解决复杂性的办法是接受耦合性,并使开发者体验统一。
在旧框架中通过创新实现简化。
Ruby on Rails 和 Laravel 都是相关的技术。
考虑一下他们。他们的成熟度会让你行动迅速。
他们最近在许多方面进行了创新,这很有趣。
不妨看看Laravel 的组件或者 RoR 的Hotwire!
下一代 JavaScript 框架
想要继续留在 JavaScript 领域的人应该考虑以下几点。
Next.js开创了一个很好的趋势,它将 React 和服务器逻辑放在一起。
Blitz.js基于 Next,是 Ruby on Rails 的一个优秀替代方案。它提供了恰到好处的抽象,让你能够将应用视为一个统一的整体。使用它有时感觉就像作弊一样——当然,这是褒义的。它启发我去探讨我们生态系统中存在的复杂性问题。
以全新的视角重新审视问题领域,并引入许多优秀且已被遗忘的模式。
React 的服务器组件让一切变得更好。
最近,React 团队提出了一个新想法,可以让我们以组件驱动的世界变得更好。
当它们发布时,我们将达到最佳情况,即 Web 应用程序仅在
需要的地方是动态的,而无需在服务器端和客户端范式之间切换。
以上所有框架都将从中受益。
综上所述
我们应该开始扪心自问,我们是否还想继续沿用目前这种标准做法。
建议的框架降低了复杂性,使我们能够体验到旧方法的简洁性,同时又能享受到现代方法的优势。
他们欣然接受后端和前端紧密耦合的事实,并使开发人员体验统一起来。
这是一个减少代码编写、减少测试时间、简化编排、减少维护复杂性所需人力投入,并将更多精力投入到我们正在努力创造的产品中的机会。
文章来源:https://dev.to/pietmichal/web-apps-are-too-complex-this-is-how-we-can-simplify-them-3ala



