关于代码中的 if else 重构

2018-03-19 09:15:34 +08:00
 MaZiT

写接口的时候,经常需要验证参数的数据类型、参数的值。还有一些选填 /必选之类的判断.

如果是用普通的 if esle 去判断的话,导致代码不优雅,后期迭代困难. 在知乎上看的 “如何优雅地解决项目中可能存在的很多的 if/else ” 也不太理解设计模式, 大家平常是用什么方式可以解决呢或者是大家有什么建议应该看哪些书、方法之类的? 求指点迷津,谢谢

7040 次点击
所在节点    程序员
45 条回复
MaZiT
2018-03-19 09:20:29 +08:00
使用的是 php 语言....目前用的是 tp5 框架
torbrowserbridge
2018-03-19 09:22:21 +08:00
你需要的是 validation 组件
powergx
2018-03-19 09:26:28 +08:00
重构 重要的是程序的结构 /流程,这种 if else 可有可无,在项目中无伤大雅
LevineChen
2018-03-19 09:29:44 +08:00
$error = 'success';

do{

if(!$user){
$error = 'need login';
break;

}

if(!$a){
$error = 'a not set' ;
break;
}

$uid = $user->id;

}while(false)
graysheeep
2018-03-19 09:32:56 +08:00
validation
torbrowserbridge
2018-03-19 09:33:11 +08:00
@LevineChen 这啥玩意,简直看不懂。你是来黑 php 的?
param
2018-03-19 09:35:22 +08:00
assert?
irenicus
2018-03-19 09:35:40 +08:00
复杂的 if else 可以重构为 dispatch table,相当于把逻辑抽象成数据另外保存,原本的逻辑本身就变成了遍历这个数据
nickel123666
2018-03-19 09:38:21 +08:00
5 楼+1,有个叫做 validation 的东西,可以参考一下。
daydaydayup
2018-03-19 09:41:28 +08:00
我不知道是不是因为我的水平低的问题.用其他组件经常被别人鄙视.你们有没有这样的情况?
xzpjerry731
2018-03-19 09:44:58 +08:00
有些 if else 的作用可以用哈希表代替。
zenxds
2018-03-19 09:45:45 +08:00
策略模式了解一下
songz
2018-03-19 09:46:56 +08:00
switch case
yangfch3
2018-03-19 09:47:47 +08:00
策略模式了解一下
MaZiT
2018-03-19 09:49:38 +08:00
@yangfch3 谢谢
wwdyy
2018-03-19 09:49:46 +08:00
看一遍
JavaScript 设计模式与开发实践

看一遍自己的代码



然后-----
看一遍
JavaScript 设计模式与开发实践

看一遍自己的代码

MaZiT
2018-03-19 09:50:00 +08:00
@powergx 但是这样会导致后面的迭代更多 if else 吧...
laobaozi
2018-03-19 09:50:11 +08:00
尽早返回
suikator
2018-03-19 09:50:41 +08:00
@torbrowserbridge #6 do{...}while(false) 简化嵌套 if
MaZiT
2018-03-19 09:50:57 +08:00
@xzpjerry731 方便给个 demo 吗?我不太理解

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

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

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

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

© 2021 V2EX