目录
基本用法
break跳出当前循环,Continue跳出当前循环,继续下一个循环
class在鸿蒙java,kotlin,鸿蒙ArkTs中都是关键字
constructor是构造的关键字
@Builder 函数的组建
样式
@Styles装饰器,定义组件重用样式,可阻止重复代码
@Extend装饰器定义扩展组件样式
@statestyle多态样式
-
focused:获焦态。
-
normal:正常态。
-
pressed:按压态。
-
disabled:不可用态。
-
selected10+:选中态
@AnimatableExtend装饰器,可定义动画属性
@Require是校验@Prop、@State、@Provide、@BuilderParam和普通变量(无状态装饰器修饰的变量)是否需要构造传参的一个装饰器。
@Prop只用于接收属性(单向)@Link同步(双向)
@Provide与@Consume可跨级传输(双向)
AppStrage/LocalStorage
@Component装饰器能装饰struct关键字生命的数据结构
mvc、mvp、mvvm、mvi之间的区别
mvc的目的就是为了M和V代码分离,降低耦合性
Model是数据来源,网络请求数据和数据库数据。
VIew:xml布局文件和动态的布局部分。
Controller逻辑控制部分。主要起到协调M层和V层的关系,起到承上启下的作用。
优点:一定程度上实现了代码分离,降低耦合性
缺点:Controller和view没有完全解耦,随着业务的逻辑增多
controller会变得越来越臃肿,在Android中Activity充当Controller的角色,后面Activity会变成GadActivity
M层和V层还有交互,没有做到完全的分离
mvp的model层数据来源,网络请求数据和数据库数据
view对应xml了布局文件和动态的布局部分。对应Activity
Presenter逻辑控制部分。通过接口连接M层和V层
优点:V层对应Activity只负责UI的展示和P层直接联系,和M层没有任何交互
V层和M层没有交互可以形成单独的组件,方便复用。
V层和M层完全分离,方便协同工作,
缺点:M层和V层都需要P层进行通许,会导致P层代码很复杂,而且都是通过接口通讯,如果一个P层用于多个Activity,所有Activity都全部实现这个接口,会涉及很多的界面那样很麻烦。
P层和V层通过接口通讯,会持有view的引用,容易造成内存泄漏
随着业务的增多,P层即使对应一个页面,接口也会越来越多
mvvm
VM层不再持有View的引用,不容易导致内存泄漏
引入响应式编程,Lifecycle生命周期感知,livedata数据存储,DataBind数据绑定概念。
Model:数据来源,网络请求数据和数据库数据
viewmodel:逻辑控制部分,作为桥梁。通知M层处理数据,将结果回调到V层处理UI。
Activity持有viewmmodel的引用,viewmodel不持有viiew的引用。
view:对应xml布局文件和动态的布局部分,这里的view是通过databind来进行双向绑定的
优点:进一步解耦,viewmodel不持有view的引用,view持有viewmodel的引用,当V层改变时,只要V层绑定的数据不变,viewmodel就不需要修改
省略findViewById,ACtivity变得很简洁
通过dataBind实现view和model层的实时改变,一方改变就会同步到对方
缺点:dataBind采用异步更新数据,对listview这样的列表,效率比较低,在实际开发中ui效果比较复杂,使用双向绑定不能完全实现,】dataBind会生成大量的代码和属性字段
复杂的页面要定义多个livedata,并且暴露为不可变的livedata
livedata是粘性事件,会导致数据倒灌等问题,
MVI
为了解决MVVM中双向绑定的不足,变成单向流,FLow替换LiveData
Model:和其他框架的model不一样,在MVI框架中存储UI的状态
view:view主要是接口,用于负责响应UI状态
INtent:在MVI中Intent不要负责传递UI状态,使用sealed关键字,形成一个封闭类,类似枚举,主要用于V层通知viewmodel处理数据
state:是一个封闭类,主要用于xviewmodel回调数据修改UI