Каково соглашение, когда речь идет о функциях с большим количеством необязательных параметров? - PullRequest
2 голосов
/ 02 мая 2019

У меня есть простая функция 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;            
}

1 Ответ

2 голосов
/ 02 мая 2019

Обычно лучше иметь «Объект параметров», в который вы передаете его, а не отдельные значения. В противном случае для вызывающих абонентов может быть очень просто передать неправильное значение.

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
}
...