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

222 天前
awesomePower  awesomePower

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

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

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

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

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

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

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

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

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

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

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

© 2021 V2EX