java 函数式编程—抽象流程控制(f)

今天是周末,所以晚睡一会儿,先祝大家周末快乐!

今天是对抽象流程控制做一个了对的时候了。

    回忆一下上次分享的内容,我们留下两个待解决的问题,一个是我们看着别扭的 instance of 和一个是这两个函数 showMessage 和 showWarning 不应该出现  evauluateUsernameFP 这个函数里,这耦合度有点超标呀。

    我们需要返回值绑定在了一个处理这个结果的处理函数,然后对结果处理分离到这个处理函数,而不是直接在校验函数里处理结果。说到这里是不是有点头绪了,开始 coding。

先写一个接口,这个接口拥有接受结果以对结果进行处理。 

处理结果我们还需对 Effect 接口进行小小修改。apply 用于处理结果。

我开始对 Result 进行大的改进,让结果绑定两个实现 Effect 接口的处理类,一个用于对成功结果进行处理,而另一个用对失败进行处理。继续修改成功类,在 bind 函数仅调用了 success (这个实现 Effect 接口类)的 apply 方法,有点意思了吧。而错误类我们进希望返回一些错误信息那么我们就让接受 String 类型吧。这里用到了泛型,为了让我们Result可以处理更多类型的结果。

大家可能发现一些业务已经被从原有方法中移除来了,我们对我们 UsernameValiation 进行一些修剪吧。

看疗效吧

    看到这里我露出了微笑,我们离函数编程已经很近了。有的朋友可能也笑了,这么繁琐有什么好处呢?我们来看一看我们 code ,现在您是否还记得我们校验函数原来的样子吗,void 没有返回值,要测试这个校验方法,

    由于校验函数和和成功处理函数 showMessage 和 showWarning 仅仅地耦合在一起。我们只能运行程序,然后一步一步地来到我们想要看界面。我们大部分时间都浪费在 debug 和测试上。

    现在呢,我们输入结果,可以用实现 Effect 接口的 mock 来便轻松容易地测试这个校验方法了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容