我正在构建一个API,我允许用户传递2个不同的自定义字段列表。 API基本上是这样的:
def动作(类型,名称,日期,name_custom_1,name_custom_2,name_custom_3,date_custom_1,date_custom_2,date_custom_3,date_custom_4)
因此,类型,名称日期是此API的参数,并且是必需的。
name_custom_*
和date_custom_*
是可选项,我可以0, 1, 2, 3 ...
由于技术原因,我对name_custom和4到date_cutom的限制为3,但最终这个限制可能会增加(但永远不会完全删除)
现在我的问题是,从用户的角度来看,制作此API的最佳方式是什么:
def动作(类型,名称,日期,name_custom_1,name_custom_2,name_custom_3,date_custom_1,date_custom_2,date_custom_3,date_custom_4)
或
def动作(类型,名称,日期,names_custom,dates_custom):
names_custom
和dates_custom
是一个不能大于X
的列表。
我在两者之间挣扎,并在两者中找到价值和逻辑。有什么建议?
答案 0 :(得分:0)
列表参数提供了更清晰的解决方案,因为:
即使在函数调用中有5个参数也比平常更多,并且通常被认为是草率的(参见How many parameters are too many?)。您可能需要考虑在此处引入一个类或几个类。根据您的应用程序,创建封装名称和自定义名称列表的类,以及封装日期和自定义日期列表的类可能是有意义的吗?也许这个动作本身更适合作为一个有许多setter方法的类?
换句话说,如果您的函数变长,或者参数列表变长,通常表明在您的设计下面有等待发现的类。