如何对业务代码中进行抽象和提取公有逻辑呢?

2021-07-29 21:58:04 +08:00
 zstone123
之前写的代码可能比较随意,没有考虑过这个问题。现在遇到的问题是两个接口代码相似度可能超过 80%。
1.对相同的代码封装为函数,不同的代码用接口去实现。(只是这么一个想法,但具体没啥实现思路
2.将两个接口合为一个接口。这样的问题是可能会多了许多 if/else 。
真心向各位请教一下,有什么比较好的做法。
3658 次点击
所在节点    程序员
27 条回复
xwayway
2021-07-30 10:35:28 +08:00
最近也在提升自己的代码能力,刚好新公司也会很尽职 review 代码,给一些意见。尽量做到领域内聚合,不做太多分支。遇到能快速返回的地方尽量快速返回。以下是我觉得对不同逻辑处理比较好的一种方式,这样的话,看代码的人不用在你的 if else 里面转晕了头

private final Map<Order.Type, BiConsumer<Order, SubmitParam>> EXTRA_PARAM_RESOLVER =
ImmutableMap.<Order.Type, BiConsumer<Order, SubmitParam>>builder()
.put(Order.Type.A, this::resolveForA)
.put(Order.Type.B, this::resolveForB)
.put(Order.Type.C, this::resolveForC)
.build();
fengjianxinghun
2021-07-30 10:42:09 +08:00
复制粘贴就是最好的抽象
chenqh
2021-07-30 13:35:05 +08:00
@fengjianxinghun 我觉得不对,我之前做页面,create 和 update 的页面不一样,管理员和其他用户用户同一种页面也分开,后来加东西,加死我了
zsyld
2021-07-30 15:13:42 +08:00
有卵用,代码干净清爽,业务分类清晰,很少出 bug,就算出 bug 也很快解决了,沙雕老板反而觉得没什么事呀,这人没多大用呀,涨工资亏的慌呀。不如换个便宜的应届生呀。。。
我现在是功能实现就好,爱咋滴咋滴,能 cmd+c/v,绝不费脑筋去抽象,出 bug 能甩锅就甩锅,缝缝补补凑合用得了
golangLover
2021-07-30 20:41:01 +08:00
@xwayway 这个 biconsumer 的应用有例子吗?好像平常就在 stream 里见过,但和你这个好像不太一样
e583409
2021-07-31 08:27:47 +08:00
@JJsty1e 只能说 case by case
daxiguaya
2021-08-01 13:06:17 +08:00
放几篇文章出来看看有没有帮助.

https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html
http://sunnyday.mit.edu/16.355/parnas-criteria.html

如果看了些 DDD 相关的资料觉得比较抽象的话,推荐一篇我最近看的: https://tech.youzan.com/dddclue/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/792566

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX