扫码阅读
手机扫码阅读

微软Canvas App实战之不完美的代码复用

261 2023-09-06
眼看着2020年马上就要说再见了,小编在这里提前祝大家元旦快乐!在新的一个年度里,坚持热爱,有所收获,平安喜乐!闲话不多说啦,今天我们继续一起来聊聊微软Canvas App实战中不完美的代码复用。


不完美的代码复用



对开发人员而言,代码复用是一个非常常规的动作。通常我们可以封装一些代码作为一个函数,然后通过参数反复调用以减少重复代码。而Excel使用者们也会编写一种叫做宏的东西来达到类似效果(实际上宏就是保存好的VBA函数)。

开始编写Canvas App表达式之后,大家会发现,这东西不能自定义函数啊!这个坑不大不小,刚好把大家的热情之火浇灭。毕竟在控件之间复制粘贴是小事,挺容易操作的,但是回头来修改的时候,不知道自己(或者别人)复制过多少处就是个非常麻烦的大事了。一旦漏掉了一两处,恐怕功能上是要出大问题的。那么微软有没有提供解决方案呢?

答案是:真没有!

不过我们还是可以通过原有功能进行变通处理,虽然不够完美,但是聊胜于无了。做法就在Select函数上。

这个函数的作用是选中控件,可以被用于触发按钮。既然有这个,解决问题的方法,自然就顺理成章奔着按钮去了!我们可以编写一个或者多个按钮,对其编写OnSelect事件,将需要复用的代码片段都丢进去。然后在需要调用的地方执行

Select(按钮名)

就可以了。这样无论多少处调用,都执行的是这一处按钮编写的代码。
之所以说这样做不完美,在使用中需注意并小心处理以下问题:
1、不要写出死循环来了。
如,按钮1中编写了需要复用的代码,依赖于下拉框2,而下拉框的OnChange时候企图执行 Select(按钮1),这种死循环是不允许的。不过编辑器会为我们发现这种情况,我们只需要注意斟酌代码的复用性就好。
2、Select的效果是异步的
这个坑比较大,而且效果隐蔽难以察觉。举例来说,我有两段需要复用的代码,分别编写在按钮1按钮2中。
Select(按钮1);
Select(按钮2);
当我试图执行以上代码的时候,两者并不是顺序执行的。也就是说按钮2中的代码已经执行完成,按钮1中的代码可能还在执行中。如果有变量同时被两者依赖,情况会变得极为诡异,因为故障可能呈现为偶发形态。
3、没有参数、没有返回值
一望可知,使用按钮代替函数执行,仅仅是一种变通,而不是真的函数。输入输出就别指望了。结合第二条的副作用,实际上能做的复用程度有限。
4、作用域不能跨Screen
即只能是局部“函数”效果,不可以做全局“函数”。毕竟是触发控件生效的,控件的作用域决定了它不可以全局复用。
5、不美观,不方便
多出来的按钮只是一种开发手段,不是真的去给用户使用的。所以我们会需要在发布前,将所有这种按钮给隐藏起来,否则会给用户造成迷惑甚至误操作。而我们开发的时候则需要将其显示出来。显然这是一个非常繁琐的操作。可以按我的个人经验来回避,就是做一个全局bool变量,绑定在这些按钮的Visiable属性上,这样可以一次性修改达到全局显示/隐藏的效果。
虽然有这么多缺点,不过这是仅有的代码复用的手段,属于实战开发中应知应会的技能。不掌握这个小技巧的话,轻则把自己淹没在复制粘贴的混沌代码里,重则对偶发的bug症状束手无策。

END

点个在看你最好看

原文链接: http://mp.weixin.qq.com/s?__biz=Mzg5MzUyOTgwMQ==&mid=2247485478&idx=1&sn=998baca5be05d2c1ee069902eca8b750&chksm=c02c3380f75bba96fa1b399ca1d8299add43376e2d7d946ea85e639e675e608af481806236f8#rd