标题很令人兴奋,不是吗?这个博客的目的不是解释这些库,非常好的文档已经可以使用了。这个博客将解释为什么本地的应用程序开发人员需要这些库,以及在了解这些库的需要时,开发人员的体验如何变化。
当你完成这个博客系列的时候,我保证,你将会学习一种新的书写移动应用的方式,在那里你有很多的可预见性、可测试性和更好的开发者体验
在这个博客中解释的概念是平台中立的;iOS和Android开发社区都可以继续阅读。
让我们理解你的需求
移动应用正在快速发展;他们中的许多人的工作比他们设想的要复杂得多。随着需求的变化,我们现有的应用程序开发架构是否足够灵活?
当前的架构(MVC、MVVM、MVP、cleanAndroid等等)都建立在一个假设上,即变化总是最小的和增量的,比如向UI屏幕添加一个或多个UI控件。但通常情况下,变化不是渐进式的,有时是破坏性的,比如。
向现有屏幕添加全新的信息——例如,在订单确认屏幕上显示可能的附加组件。
在现有流程中引入新屏幕——例如,在用户支付订单之前介绍用户经常购买的产品。
我们如何应对这类应用需求?我们经常重写移动应用程序屏幕,是的,或多或少,我们最终改变了整个应用程序的许多类!
为什么?当我们向现有屏幕添加新信息或在移动应用程序流中添加新屏幕时,我们正在改变应用程序状态。通常情况下,改变应用程序状态会通过应用程序代码来改变其变化,通常,我们最终会编辑大量的类。
应用程序状态是什么?
App状态是应用程序使用的UI数据模型,UI视图反映了它们的部分和用户操作,来自api的数据,以及SQLite- content provider等数据源的更新。你可能不会用“App状态”来指代它们,但当然,每个应用都有类似“App状态”的东西。
我们如何更新App状态?
没有一致性:通常,对状态的微小修改会导致中断,因为我们没有一致的方法来处理应用程序的UI状态。开发者可以自行决定如何更新应用程序状态。通常,相同的子状态由不同的代码块更新。应用程序状态更新的多个代码块。
没有单一的事实来源:应用程序UI状态存储在不同的对象中,并且通常根据屏幕的需要来定义它们。数据在许多对象之间复制。
随着应用程序的增长,处理状态的复杂性也在增加。例如,在上面的图片中,如果年龄被更新,每个有年龄的屏幕状态都必须更新。
多个通信路径:在典型的应用程序代码中,更改有两种方式:从代码块到数据模型,从数据模型到组件。
如果你认为上面的图片看起来很乱,那么残酷的事实是,我们大多数的本地应用程序代码看起来完全一样。
既然我们已经了解了这些问题,让我们来找出解决方案——有没有更好的办法?
Redux
Redux是UI应用程序的一个流行的状态容器。在JavaScript世界中非常流行,它已经被证明可以解决我们在本文中提到的大多数本地应用程序工程的问题。
它从以下原则开始:
对应用程序状态有一个单一的事实来源。
我们不要让每个屏幕都有它自己的状态。相反,每个屏幕都应该使用同一个对象——app状态。国家可以有分州。亚州的构成构成了app的状态;例如,在一个订购应用程序中,子状态可以是用户、用户配置文件、报价、购物车、订单、最后订单等等。
2. 状态是只读的。
并不是应用程序中的每个功能都能更新状态。相反,要有一个一致的机制来更新状态。
状态更新的启动应该是显式的,使用描述所发生事件的对象。Redux将对象称为“Action”。
视图和网络回调都不会直接写入到状态。
所有的变化都是集中的,并按严格的顺序逐一进行。没有竞争条件!
3. 纯函数改变状态。
状态更改是由执行前一个状态和一个操作并返回下一个状态的函数来完成的。这些函数不会改变前一个状态;它们创建并返回新的状态对象,而不是改变以前的状态。Redux把这些函数称为“还原剂”。
那么单元测试这样的机制呢?
绝对必要的。为了确保单元的可测试性,这样的机制应该是一个纯粹的功能,没有原生应用的复杂性,比如Android的“上下文”,或者iOS中的“视图控制器”。
对状态改变
状态被更新了,现在组件如何随着应用程序状态的变化而更新?
在理解这一点之前,让我们了解组件。组件可以是本机应用程序页面的一部分,甚至可以是一个完整的应用程序页面。这些是Android中的片段和活动组件;Viewcontroller和视图是iOS中的组件。
为了获得更新,组件订阅状态更改。
当应用程序状态更新时,订阅的组件将被通知状态更改。通过更新UI、采取一些操作或简单地忽略事件,可以由组件来对事件做出反应。
很简单,不是吗?记住,在典型的本地应用程序代码中,我们有一系列的回调,敲入回调地狱的门。郑州人流多少钱:www.zztjyiyuan.com郑州人流医院:www.zztjyiyuan.com