选择决定使用一个固定的框架将对架构产生重大影响,无论是在短期内将产品按时上市还是长期上市。它可以影响您的应用程序维护和修改的容易程度,是否能满足不断变化的需求。答案可能并不总是清晰或简单,但它会帮助您了解何时选择大型强势或侵入或自以为是的框架。
在本文中,我们将介绍一些固定的和非固定的框架,以及哪些用例对于采用任何一种方法都有意义。我们还将这种思维应用于更适合作为服务的固定平台(PaaS)或不太自以为是的基础架构即服务(IaaS)的案例。这有助于您在构建自己的应用时做出最佳选择。
什么是“强势”框架?
根据定义,框架对架构,最佳实践和约定做出一些假设。这通常对开发人员和架构师很有帮助,因为它为未来的架构决策提供了一条很好的路径,它还可以帮助您最终获得可预测,一致且易于其他开发人员理解的代码库。
但即使使用相同的语言编写的两个不同的框架,它们也会在路径径完美程度上而有很大的不同。一个框架极端地可以被称为“自以为是(强势 侵入性)”。这意味着框架设计者已经建立了一条“快乐的道路”,只要遵循框架设计者的特定的假设, 框架的使用者就可以更容易,更快地进行开发 。当您的需求与框架的目的匹配或一致时,选择一个自以为是的框架可以极大地促进您的应用程序的开发。强制执行或严格约定还可以使新开发人员更容易加入并立即开始提供价值。
但是,它有时也意味着这些假设前提全部有益。这可能意味着实践中的许多事情,从严格或强制约定到缺乏可扩展性或可能限制到单个工具集。归根结底,“自以为是”意味着框架最初是按照最初的预期运作的,并且从中可以看出它有时被迫用很大的痛苦才能完成。
决定使用强势的框架属于技术决策,虽然您可以从易于启动中受益,但是如果您需要扩展应用程序超出框架的功能,那么使用固定框架的决定可能会以未来的代价获得。
错误使用框架的下场:
为了增加深度,让我们看一下前端和后端框架的一些具体示例。我们将看看Angular vs React和Django vs Flask,但这种思路也适用于其他框架,如Vue,Ruby on Rails等等。
Angular vs React
我们会认为 React 是一个没有意见(非强势 非自以为是)的框架,而 Angular 是一个有强烈主张的框架。两个框架都能够创建功能齐全的单页Web应用程序,并提供丰富的组件库和大型用户群。
为了进行比较,让我们考虑每个框架如何处理数据绑定。Angular提供开箱即用的双向数据绑定,其中React提供单向数据绑定。为了更深入地了解这一点,Angular假定MVVM或MVC类型的架构,并提供模型(数据存在的位置)和视图(页面上呈现的内容)之间的双向链接。这意味着当用户更改页面上的内容时,您的模型会自动更新。另一方面,React会强制您自己管理此更新。
作为一个具有强烈意见的框架,Angular会假设您将如何向组件提供数据并使状态可用。它提供了所有必要的链接,因此您所要做的就是声明一个变量并在模型中使用它,而不必担心视图的更新方式。这称为数据绑定,它是Angular开箱即用的东西。
另一方面,React不提供此功能,因为您必须显式处理组件中的更改事件。如果模型更改不是由UI启动的,则必须通过调用setState或使用状态挂钩显式更新状态,然后状态挂钩将自动确保更新视图。这可以在每个组件中产生更多代码,甚至可以使用其他库(如Redux)来帮助管理跨组件的状态 - 但它也提供了更高程度的自定义。
React也比Angular轻量,所以如果你不需要Angular的所有集成功能,那么React可以减少最终用户的数据使用和加载时间,以及开发应用程序的开发人员的认知负担。
例如,Angular对网络连接,语言选择和构建工具链做出了类似的假设。当您想要一个“正常工作”的完全集成环境而不必分别考虑每个组件时,这将节省时间。
归根结底,这取决于偏好。为您做出选择可以简化开发并向您发送规范路径,这可以为您快速构建应用程序节省大量时间
所有事情都是平等的,并且假设您同时拥有支持Angular和React的开发人员,如果您正在构建快速应用程序原型并且您不想经历构建React应用程序所需的设置和初始投资的头痛,Angular是舒适轻松的选择。使用它可以帮助您快速启动应用程序,因为必须做出更少的决策,并且需要集成更少的代码才能找到可行的解决方案。构建工具集对于Angular来说也是非常标准化的,并且存在大量用于快速启动项目的创建脚本。
另一方面,如果您知道自己正在开发一个非常自定义的Web /移动应用程序,并且希望能够灵活地以零散的方式执行操作以创建高性能且功能强大的Web应用程序,那么React肯定是一个更好的选择。
Django与Flask
关于 Django 和 Flask 之间的选择,可以使用不同的用例。Django高度自以为是; Flask不是。
Django为您的所有应用程序提供全功能的体验,包括ORM,管理面板和基于约定的目录结构。另一方面,Flask提供绝对的简洁性,高度的控制,并且能够遵循您喜欢的几乎任何架构路径。它的重量也比Django轻,因为它集成了更少的功能。
这两个框架都在WSGI上运行,并提供开箱即用的模板。
当您构建相当标准的Web应用程序或服务(例如新闻站点,组织网站,电子商务网站或博客)时,您将希望使用Django。Django提供了大量的示例,入门应用程序,以及一条易于理解的简单路径供您遵循。
如果您正在创建具有极少需求的产品,例如小型内部API - 或者如果您需要选择特定组件(例如自定义身份验证或数据层访问),那么Flask是更好的选择。它允许您在产品体系结构的每个阶段选择组件。如果您正在构建完全自定义的东西并且您没有可以遵循的通用功能和架构路径,那么它也是更好的选择。Flask允许您在做出决策时更加灵活,并且不会强迫您按照预定义的路径进行操作。
PaaS与IaaS
框架可以是固执己见的。您的基础设施也可以。如果您问自己您的部署平台有多自以为是,PaaS和IaaS之间的区别变得更加明显。
PaaS产品为您提供了一个交钥匙环境,您可以在其中构建应用程序,以便为您管理网络注意事项,基础架构配置,计算和存储。在我们的模拟中,PaaS是一种固定的框架,为您做出许多部署和运行时架构假设。Heroku和Elastic Beanstalk是PaaS平台的示例。您通过PaaS获得的是一个经济高效,易于扩展的托管平台,可让您专注于构建和部署应用程序。
相反,IaaS框架相对不受影响,提供了一个灵活的基础架构,您可以轻松地进行自定义,配置和部署。虽然数据中心和服务器基础架构是受管理的,但您必须专门考虑并解决规模调整,容量规划,基础架构支持,服务集成和应用程序架构。Microsoft Azure,AWS和GCP都提供IaaS。当灵活性是必需的或应用程序需要时,IaaS是一个很好的选择:
简单地说,当您想要快速构建产品而不重新发明轮子时使用PaaS,并在有自定义或非标准需求时选择IaaS。
结论
如果您有明确的目标并且遵循良好的开发或架构路径,那么固定框架可以通过使应用程序更易于开发和部署来帮助您节省时间和金钱。一个固定的框架为您提供护栏,大量的入门代码,并优化您的路径。但是如果你知道事情会很快消失,那么你应该考虑使用一个非自以为是的框架。
例如,如果您想构建一个快速UI或者您知道您的UI将使用标准组件 - 并且您几乎不需要以非标准方式自定义或更改这些组件的行为 - 那么可以使用固定框架Angular比React更好的选择。但是,如果您需要灵活的Python Web框架 - 或者正在构建Django可能没有示例或开源基本代码的自定义产品 - 那么您可能需要考虑使用非自以为是的Flask。
将看法与不受欢迎的概念扩展到部署选项为我们提供了一种方便的方式来查看PaaS与IaaS。如果你想要一个交钥匙环境,你应该考虑像Heroku这样的自以为是的PaaS选项。对于高度定制的需求,请考虑IaaS的灵活性。