因为后台service比较复杂,需要三个不同的实例协同工作,所以之前Oliver开发了Scaffolding App这个Angular前端,目的是方便我们随时测试三实例协同是否仍然正常。
我想的是把这个Angular前端当成一个单元测试工具来用,每次我们改了后台之后,都把这个Angular UI打开跑一跑。
我看到你之前有个提交把client.write(data) 注释了,换成client.emit(data[0], data[1]);
我想你这个改动肯定是for昨天串QR code的scenario的,但是这样一改,之前的unit test就fail了。
你用emit(data[0], data[1])这种写法不太好:
这个函数通过回调方式被调用,你在函数体内作为被调用者,无法知道data的数据类型,而你直接硬编码成data[0], data[1]. 这就告诉了代码的阅读者:
data是一个至少包含了两个元素的数组
data是一个至少包含了两个字符的字符串
当运行时data的数据类型不满足以上两个条件时,代码就会报异常,退出。
这里无论是client.write,还是client.emit, 我们都可以把它看成是广义的发布者模式,会有socket的另一端负责接收。
这种模式的最佳实践是,发布者不关心发布数据的格式,只是简单粗暴的把数据推送出去,具体不同的处理由接收方负责,比如接收方的伪代码可能是这样的:
If( typeof(data) === “String”)
按照字符串处理
If( typeof(data) === “Array”)
按照数据处理
If( typeof(data) === “Object”)
按照对象处理
而你现在发送端的data[0], data[1], 从design上说相当于把这种处理从接收端移到发送端了。
为了不影响我们QR code scan的功能,我只是在你提交基础上简单加了一行注释,注明client.write(data)的必要性。
麻烦你有时间的时候,琢磨下如何改动现在的代码,使得单元测试和QR code scan的流程能同时工作,谢谢。这也能提高你编程的水平。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":