java fluent风格_[代码风格]fluent-style(day1)-为何存在

本文探讨了Java Fluent风格存在的原因,通过一个日常生活场景的例子展示了如何使用Fluent风格来提升代码的可读性和流畅性,强调了其在解决流程性问题和减少代码阻塞感上的优势。
摘要由CSDN通过智能技术生成

前言

今天纠结了好久如何能把fluentStyle的第一个问题,为什么存在FluentStyle这个问题想个示例讲明白说清楚,花了好长时间。最后总算是有一个自己还相对来说比较满意的结果,能够记录一下了。

FluentStyle的启发

其实说实在的,因为并不是创造FluentStyle的人,所以现在考量它为什么存在,有些马后炮的意味,为赋新词强说愁,为找意义强找理由。

不过呢,为了不那么上纲上线非要弄出个123不可,经过几个小时的思考,我决定还是回归本源,为什么一开始看到这个风格会有悸动,为什么使用这个风格的时候会感觉很爽利,这个感觉一定是来自于某种痛点的消除,可能是对于美感的感受,可能是对于效率的追求。

所以,就聊聊这个感受。

java虽然是面向对象的语言,但是实际工作中,还是要写很多很多的流程性问题,比如随便写一个接口,就要面对非法入参的判断,执行逻辑的时候又要考虑有没有白名单?有没有定制规则?要不要数据转化,要不要数据封装?要不要发什么消息?要不要...等等一系列问题,写了系分之后,还是有那么1234567的步骤,可是实际再写起来,总是各个节点都有可能阻塞,又增加了很多的null值判断,为了安全写了一堆的不好看的代码,写起来也很烦,总是打断思路。

然而FluentStyle这种流式风格在我面前出现时,第一时间的反应就是,这个东西可能帮我解决这个问题!所以要说它为什么存在,可能也是某个大佬在写代码的时候被这种感受所疯狂折磨。

举个小小的例子

举一个不太恰当的例子,比如一个人一天要做人多事情(业务流程),要去工作,要打电话,要发短信等等,这些任务和行为发生之后,人还是那个人,只不过一天的举动变多了。如果要去实现这样一个模型,我们的处理办法可能是

// 要打一个电话

boolean res = Person.dadainhua();

if (!res) {

System.out.println("电话没打通!")

} else{

System.out.println("打通了一个电话")

}

// 要办一个工作

boolean res = Person.dowork();

if (!res) {

System.out.println("工作失败了")

} else{

System.out.println("工作完成!")

}

// 又要办一个工作

boolean res = Person.dowork();

if (!res) {

System.out.println("工作失败了")

} else{

System.out.println("工作完成!")

}

...

当然,我们也可以封装代码,把单元的行为抽离出来,写起来也没这么多冗余代码,但是呢,明显感觉到,每一个行为和行为之间是断层的,就像是一个人总是有发呆的那么一会儿,就感觉很不舒适。

正常来讲,我们每天的生活,可能是打个电话,发几个消息,工作一会,在工作一会,然后吃点饭,然后玩玩手机,等等,时间是连续的,人的行为也是连续的,而传统的代码书写方式确实会让人感觉这种阻塞。

让我们换一个方法试试呢?

public class Person {

/**

* 一天做的事

*/

private ThingsCollect thingsCollect;

public Person(ThingsCollect thingsCollect) {

this.thingsCollect = thingsCollect;

}

public static class ThingsCollect {

/**

* 工作事项

*/

List works = new ArrayList<>();

/**

* 打电话

*/

List phones = new ArrayList<>();

/**

* 发消息

*/

List messages = new ArrayList<>();

/**

* 吃东西

*/

List foods = new ArrayList<>();

/**

* 行动

*/

List moves = new ArrayList<>();

private void asserts(String thing) {

if ("".equals(thing)) {

throw new RuntimeException();

}

}

ThingsCollect doJob(String job) {

asserts(job);

this.works.add(job);

return this;

}

ThingsCollect callPhone(String phone) {

asserts(phone);

this.phones.add(phone);

return this;

}

ThingsCollect writeMessage(String message) {

asserts(message);

this.messages.add(message);

return this;

}

ThingsCollect eatFood(String food) {

asserts(food);

this.foods.add(food);

return this;

}

ThingsCollect walk(String walk) {

asserts(walk);

this.moves.add(walk);

return this;

}

Person collectDay() {

return new Person(this);

}

}

public static ThingsCollect start() {

ThingsCollect thingsCollect = new ThingsCollect();

return thingsCollect;

}

public static void main(String[] args) {

Person person = Person

.start()

.eatFood("早餐")

.walk("去上班")

.doJob("写三行代码")

.doJob("改五个bug")

.writeMessage("吐槽bug")

.callPhone("bug太多开了一个CR会")

.writeMessage("回来继续吐槽bug")

.walk("收工回家")

.eatFood("吃增肥夜宵")

.collectDay();

}

}

我们把每天做的事情收集成了一个集合,然后人的行为会向这个集合中增加动作,我们不用关心先做了什么后做了什么,只需要一路流畅的把事情xi

把每天的行为列出来,我们的行为都累加到这个集合里。每天开始的时候,我们焕然一新,start了一天的行程,最终忙忙碌碌结束了一天,并作了总结。这样一个链路下来,在书写代码的时候没有阻塞,思路一致跟着行为时连贯性的去执行,的确达到了流畅

ps

by the way每天想日更,如果提前命题,真的会增大沉没成本,在这个问题深入了一两个小时之后,发现好像说不太清楚的时候真的很要命,换命题又觉得前两个小时白费,不换又不敢保证能不能写的出来,纠结。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值