Здравствуйте, -n1l-, Вы писали:
N>Здравствуйте, MadHuman,
N>если вы боитесь, что внутри вашей функции какие-то другие функции выкинут какой-то ArgumentException,
N>который не будет значить, что пользовательские данные некорректны, а будет иметь отношение к реализации тела вашей функции, то тогда хорошим способом будет
N>написать внутренний блок try-catch для вашей функции GetThing и полученный эксепшн обернуть во что-то другое.
N>типа
N>N>public object GetThing(UserInput input) {
N> input = input ?? throw new ArgumentNullException("UserInput can not be empty.");
N> try {
N> return GetThingInternal(input.SubscriptionId, input.PromoCode, input.Card);
N> }
N> catch(Exception ex) {
N> throw new InvalidOperationException("Sabscription can not be renewed.", ex);
N> }
N>}
N>
N>Если этот путь не подходит, можно создать валидатор для данных и использовать этот валидатор перед тем как
N>отправлять ваши обьекты в модель. Сам валидатор прикрутить через middleware, так как речь идет о веб приложении.
N>Для таких валидаторов есть библиотечки типа fluentvalidation и куча примеров как их использовать.
А почему бы UserInput не валидировать данные в конструкторе?