一个方法很多参数,算是好的设计还是不好的设计

67 天前
 awesomePower

如题,一个方法含有十几个参数,这算是糟糕的设计还是好的设计,还是无所谓。 有这方面的标准么?

6342 次点击
所在节点    Java
50 条回复
iOCZS
67 天前
看情况,偶时候难免
maokg
67 天前
Android 源码倒有很多方法是很多参数的,但会在方法里调方法,f1(var a, var b, var c, var d){ f2(var ... x)}
yazinnnn0
67 天前
能像 kotlin 那样有默认值就不是遭设计, java 这种想要默认值需要重载无数个的是糟设计
goxxoo
67 天前
十几个算啥? 我遇到过一个接口里大几十个参数的, 连调用哪个参数实现功能,都特么没写的
qping
67 天前
实在太多,就建个 options 类,包一下。我们想要参数越少越好,但有时候很困难
jackmod
67 天前
有条件就包装成新的类。含义相似参数塞太多是很糟糕的,但一般这种时候都可以甩锅🐶
比如有些 ORM 不支持动态数量的参数(或者说传一个 List ),那就只好塞到 255 个了🐶
woodfizky
67 天前
举个例子,ElasticSearch 的 Python 包,8.0.0 的,AsyncElasticSearch 类的 search 实例方法,我数了一下大概 60 多个参数。。不过全部是默认参,进到方法里面再具体做了参数校验或判断,一般情况实际传进去的参数比较少。

有时候没办法啊,场景就决定了参数多。

你可以把用途比较统一的,属于某个模块的一系列参数写到一个类/字典里,传参的时候传单个对象,避免方法调方法还要多次传多个参。
HackerJax
67 天前
python 那种不依赖参数顺序且有默认值的可以,PHP 那种强依赖顺序的就不行,
loryyang
67 天前
主要看是否有冗余,而解决参数多的代码结构问题,可以用参数类来包装
ychost
67 天前
超过 3 个参数就觉得不友好了
shunia
67 天前
主要看是否有文档,有文档都是好设计,没文档你写出花来我用的时候也得骂你。
Spute
67 天前
从设计的角度看,参数越多代表依赖的输入越多,意味着耦合性越高,这让相关代码很难修改,这个函数也难被复用。所有如非必要,方法的参数应该做的最少且必要。
LowBi
67 天前
算坏吧 多了可以选择放到一个对象里
InkStone
67 天前
参数太多的情况下应该通过结构体传入,正好结构体的 build 还能降低参数构造的复杂度。

另外基本类型参数太多时,应该通过封装类型做区分,便于使用。

尽量不要通过 key 为 string 的 map 传参数,每次看到这种东西都想砍人
junmoxiao
67 天前
百分百算差的,这种就该定义结构体
shawnsh
67 天前
好与坏的标准是什么
NizumaEiji
67 天前
当然不好 且不提参数多了写方法调用的时候很容易出错
到时候有需要新增个参数 方法签名一变,一改一个不吱声。到时候要么改动上游调用代码 要么自己搞方法重载。
所以一般超过一定的参数数量都是要求把入参合并到一个对象里。

我目前见过参数最多的就是 go 的 wire ,不过好在这玩意儿中间的一些代码都是生成出来的,不用手动改,要不头都大了。
magicfield
67 天前
静态语言方法放一堆参数勉强能接受,但最好还是整个对象。
动态语言一个方法塞一堆参数,甚至用**kwargs 这种狗屎特性之类,有时候真的想砍人
Govda
67 天前
@HackerJax php8 已经改了,可以跟 Python 一样
luzemin
67 天前

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

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

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

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

© 2021 V2EX