首页 > 自考资讯 > 自考知识

取代iframe,替代mvc

头条共创 2024-07-05

152481255901398e4224c8e~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720739926&x-signature=Sdmo9xvyghz5nRNtQ2iPLApdqxY%3D

Flux 是什么?

Flux是一种架构思想,专门解决软件中的结构问题。这是同一种MVC架构,但是更简单、更清晰。

Flux 有多种实现方式。

152480932445778a3e9ccbf~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720739926&x-signature=Iz3Y%2BYwoBTH0QHF82qY3O9SxJ0s%3D

Flux将一个应用分成四个部分:

15248126001097775536725~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720739926&x-signature=71EYekUeDUE7wnuG8wOJf25tjiU%3D

视图:视图层。这是用户看得见、摸得着的地方,是MVC和MVVM架构中都存在的概念。不过,我认为定义不一致,存在细微差别,但这种差别并不妨碍你首先理解视图这个术语。

Actions:视图层发送的消息(例如mouseClick)。这是从一个地方传递到另一个地方的结构化信息,整个过程就是一个动作/事件。

调度程序:用于接收操作并执行回调函数。调度员是从触发操作到导致商店发生变化的镇流器。这比典型架构设计中直接改变“事件”逻辑的“数据”更加“正式”。

Store(数据层):对应传统意义上的数据,与MVC、MVVM模型有一定的对应关系。当发生更改时,视图会收到页面更新通知。

15248111061557f5d3863c1~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720739926&x-signature=dMBi8VlJXBE48Fbl4UEf4qq%2FByw%3D

基于 Servlet 容器的 Web MV

对于Web 开发人员来说,Spring 的Web MVC 框架随着Spring 一起成长,但很早就因为基于servlet 容器而被批评难以测试。

1524812627096c59004b5f2~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720739926&x-signature=tCzSEDxq1qAASv4n10n8FWRrr8Y%3D

实现 Reactive Streams 的 Reacto

确实,Web Flux 是独立于servlet 容器的,但在讨论Web Flux 之前,我们首先需要了解一下Reactor 项目。它由Spring 的当前所有者Pivotal 推出,并实现了Reactive。流规范。用于支持实现反应式编程。

然而,从使用XML 配置的实用控制器界面到使用JavaConfig 的后注释,Web MVC 已经变得越来越容易使用。如果你愿意,你可以采用循序渐进的方式,逐步重建一个基于servlet API 的Web 应用程序,达到使用很少的servlet API 并在程序中利用屏蔽servlet API 的效果代码级别也可以实现。

1524812654109f16a6d0c59~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720739926&x-signature=hJy1vWLxWTynqKE66dRRbHVqxpk%3D

目前,基于servlet API 的Web MVC 框架是一个优势,因为许多Java 开发人员都是从servlet 容器中获得Web 开发经验的。 Web MVC 允许你在不直接面对servlet API 的情况下编写程序,但如果你在配置或API 中找不到相应的解决方案,或者你有复杂的心智模型,那么就更意味着受到Spring 的限制。如果您不知道HttpSession 和ServletContext 的等效功能,一个好的经验法则是直接从HttpSession 和ServletContext 调用它们。

确实,Web MVC 是基于servlet 容器的,因为当你编写程序时,即使不使用servlet API,底层仍然要依赖servlet 容器的功能,例如Spring Security。这基本上是基于servlet容器的过滤器解决方案。

然而,如今,Servlet 被认为是过时的,对于许多开发人员来说代表着过时的技术。在Java EE 8 发布前后,每当有人谈论servlet 4.0 时,就会听到“servlet 4.0”这个术语。他提出了诸如“Web Flux 可以与servlet 分离”等建议。

152481268197127ff050fd0~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720739926&x-signature=i8jMkTF2gk2yQK9ahfHUydiNQis%3D

示例:

假设您有以下需求:我有一个待办事项列表,在弹出窗口中编辑待办事项,按下回车键时发出API请求,如果请求成功则关闭弹出窗口,如果无法保留弹出窗口则打开窗口。

如果您的商店按域分区,则它支持回流和还原。

Reflux可以放在View层,由组件管理。这种打开和关闭状态基本上与POST_TODO_COMPLETED 操作有关。为了实现这个功能,UI层必须直接监控成功请求的动作。

Reflux 通常在视图层使用异步操作triggerPromise。

15248120737113e7f13427e~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720739926&x-signature=tji8LAcfZmdLiPR7AjSw7lInKUI%3D

当然,这显然违反了FLUX 的数据流,被认为是动作和视图之间的私密交换。在Redux中,不存在像triggerPromise这样的“后门”,因此域与页面无关。尽管这两个页面显示和操作相同的域对象,但它们的外观和行为却截然不同。这种情况并不少见。

1524812726910f93214e577~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720739926&x-signature=7xCEjIyMsTehDfqoZPOyXwWvxGk%3D

综上所述,前端开发长期以来一直在为后端做出贡献,所以感觉它在框架和理念上对后端的影响应该是很深的。介绍FLUX 和Redux。这使得开发人员能够真正从前端的角度思考、组织和前进。

总结

Flux 的优点是发生的所有事情都是在调度程序中预定义的(或者什么也没有发生),因此每个事件都是可预测的。

Flux 的结构被称为“大型项目的架构”,因为它可以轻松处理极端情况(如果你用它来创建待办事项列表,那你脑子肯定有问题)。令人惊讶的是,它可能是移动时代最好的免费网站构建器,拥有如此复杂的编辑界面。

1524812813033e7a1f2e542~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720739926&x-signature=WckUkNMzE4zhCFVVDj%2Bo7wUg5EQ%3D

版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。

猜你喜欢