В моем бэкэнде C# (.Net 6) (но также и в других языках) я часто сталкиваюсь с проблемой, что я получаю объект, который мне нужно проверить и преобразовать перед его использованием. В настоящее время я справляюсь с этим, создавая две переменные: fooRaw и foo. Я сохраняю ответ на fooRaw, затем проверяю его. После этого я анализирую его и сохраняю результат в foo.
Я не очень уверен, что это лучший способ сделать это - может быть, кто-то там может просветить меня или, по крайней мере, вдохновить меня, как я могу это улучшить.
Два примера:
Пример 1:
List<FooType> fooRaw = GetFoos(filter: "id = '123'");
// id should be unique therefor only one result is valid
if (fooRaw.Count != 1){
throw //...
}
FooType foo = fooRaw.First();
Пример 2:
string fooRaw = await httpResponse.Content.ReadAsStringAsync();
// I have a http response that i want to parse -> only works if string is not empty
if (!string.IsNullOrWhitespace(fooRaw)){
throw //...
}
FooType foo = JsonSerializer.Deserialize<FooType>(fooRaw);
Любые идеи, как я мог бы улучшить этот процесс или, по крайней мере, улучшить именование переменных и удобочитаемость?
Это больше вопрос для проверки кода стека, а не переполнения? Здесь мы решаем проблемы, где в обзоре они могут помочь вам с чем-то вроде этого немного лучше, без того, чтобы люди немного (много) ссорились.
if (!string.IsNullOrWhitespace(fooRaw)){ - значит, вы выбрасываете исключение, ЕСЛИ fooRaw НЕ Null или WhiteSpace, т.е. имеет контент?
@SimonPrice Этот вопрос будет закрыт при проверке кода как слишком гипотетический. Судя по именам типов, это не настоящий код из реального рабочего проекта.





Обычно, когда мне нужно назвать быстрые переменные, я делаю их по крайней мере связанными с тем, что они должны извлекать, но я делаю это более коротким словом или словом без заглавных букв, чтобы указать на его краткое использование.
как var doc = document или var collect = Collection.FirstOrDefault()
Тем не менее, я бы предпочел вообще не сокращать их и отдавать приоритет читабельности, поскольку вам нужно понять это, когда кто-то другой или вы через несколько месяцев оглядываетесь на код.
Ваше решение в порядке, а суффикс Raw хорошо указывает на то, что это необработанное, непроверенное значение. Я бы, вероятно, использовал rawFoo вместо fooRaw, так как это звучит более «естественно» (и Visual Studio не будет предлагать автодополнение fooRaw, если вы начнете вводить foo), но это может быть делом вкуса.
Если вы хотите избежать необработанной переменной в области действия после проверки (чтобы кто-то мог случайно использовать ее вместо проверенного значения), а ваша логика проверки просто выдает исключения, вы можете выделить свою логику проверки в отдельный метод и избежать промежуточной переменной:
var foo = ValidateFoo(GetRawFoo(...));
Вы имеете в виду "временный"?