有很多可选参数的函数有什么约定?
What's the convention when it comes to functions with a lot of optional parameters?
我有一个简单的 HttpsGet 函数,它带有大约 20 个可选参数。
现在我正在考虑是将每个参数设为可选还是让用户创建一个他们将与该函数一起使用的自定义选项对象。创建 200 个重载是不可能的。
使其他用户可读且易于使用函数的最佳方法是什么?我错过了另一个解决方案吗?
为了便于阅读,这里是代码的简化版本。
static List<Assignments> GetAllAssignments([Optional] string levels, [Optional] string passed, [Optional] stringresurrected)
{
var json = Get($"assignments?{levels}&{passed}&{resurrected}");
var assignments = JsonConvert.DeserializeObject<CollectionResponse<Assignments>>(json).Data;
return assignments;
}
通常最好有一个 "Options Object" 来代替单个值。否则调用者很容易传递错误的值。
static List<LevelProgression> GetLevelProgressions(LevelProgressionOptions options)
{
}
选项可能如下所示
public class LevelProgressionOptions
{
public LevelProgressionOptions()
{
// Set any default values
SomeProperty = 1;
}
public int SomeProperty { get; set; }
public string AnotherOption { get; set; }
// other values omitted
}
我有一个简单的 HttpsGet 函数,它带有大约 20 个可选参数。
现在我正在考虑是将每个参数设为可选还是让用户创建一个他们将与该函数一起使用的自定义选项对象。创建 200 个重载是不可能的。
使其他用户可读且易于使用函数的最佳方法是什么?我错过了另一个解决方案吗?
为了便于阅读,这里是代码的简化版本。
static List<Assignments> GetAllAssignments([Optional] string levels, [Optional] string passed, [Optional] stringresurrected)
{
var json = Get($"assignments?{levels}&{passed}&{resurrected}");
var assignments = JsonConvert.DeserializeObject<CollectionResponse<Assignments>>(json).Data;
return assignments;
}
通常最好有一个 "Options Object" 来代替单个值。否则调用者很容易传递错误的值。
static List<LevelProgression> GetLevelProgressions(LevelProgressionOptions options)
{
}
选项可能如下所示
public class LevelProgressionOptions
{
public LevelProgressionOptions()
{
// Set any default values
SomeProperty = 1;
}
public int SomeProperty { get; set; }
public string AnotherOption { get; set; }
// other values omitted
}