今天是周末,所以晚睡一会儿,先祝大家周末快乐!
今天是对抽象流程控制做一个了对的时候了。
回忆一下上次分享的内容,我们留下两个待解决的问题,一个是我们看着别扭的 instance of 和一个是这两个函数 showMessage 和 showWarning 不应该出现 evauluateUsernameFP 这个函数里,这耦合度有点超标呀。
我们需要返回值绑定在了一个处理这个结果的处理函数,然后对结果处理分离到这个处理函数,而不是直接在校验函数里处理结果。说到这里是不是有点头绪了,开始 coding。
先写一个接口,这个接口拥有接受结果以对结果进行处理。
处理结果我们还需对 Effect 接口进行小小修改。apply 用于处理结果。
我开始对 Result 进行大的改进,让结果绑定两个实现 Effect 接口的处理类,一个用于对成功结果进行处理,而另一个用对失败进行处理。继续修改成功类,在 bind 函数仅调用了 success (这个实现 Effect 接口类)的 apply 方法,有点意思了吧。而错误类我们进希望返回一些错误信息那么我们就让接受 String 类型吧。这里用到了泛型,为了让我们Result可以处理更多类型的结果。
大家可能发现一些业务已经被从原有方法中移除来了,我们对我们 UsernameValiation 进行一些修剪吧。
看疗效吧
看到这里我露出了微笑,我们离函数编程已经很近了。有的朋友可能也笑了,这么繁琐有什么好处呢?我们来看一看我们 code ,现在您是否还记得我们校验函数原来的样子吗,void 没有返回值,要测试这个校验方法,
由于校验函数和和成功处理函数 showMessage 和 showWarning 仅仅地耦合在一起。我们只能运行程序,然后一步一步地来到我们想要看界面。我们大部分时间都浪费在 debug 和测试上。
现在呢,我们输入结果,可以用实现 Effect 接口的 mock 来便轻松容易地测试这个校验方法了。