Начало было положено и что-то у нас получилось даже запустить. Однако, погоду хоть и можно получить, но она какая-то странная. Надо бы ее переделать.
Для начала изменим класс WheatherForecast (мы соблюдаем правило - "один класс, один файл", - поэтому класс можно найти в файле с таким же имененм - WheatherForecast.cs). Температура в фарингейтах нам больше не требуется, ее мы уберем. Сведения о погоде попробуем разбить на отдельные свойства - так будет их проще искать. В качестве отдельных свойств помимо температуры можно выделить влажность, давление, ветер, облачность. Также нельзя забывать и о городе, для которого получаются сведения.
Влажность интересует нас с точностью до целых, поэтому ее тип - int.
Давление также достаточно указать в целых числах, поэтому она будет тоже int.
Облачность можно описать словами ("облачно" или "чистое небо"), поэтому ее тип string.
Город пусть также задается строкой, тип поля будет string.
Судя по всему про ветер мы забыли. Ок, какой же у него тип? Число - ведь он измеряется в м/с? Или может быть строка, ведь так задается его направление? Подходящего типа для ветра найти мы не можем, поэтому создадим свой в отдельном файле - Wind.cs.
Не плохо мы описали погоду, да?
Нет - в коде наблюдается бардак. Пусть сейчас он - как один носок посередине кухни, - не выглядит страшно, но мы то знаем, чем все это может закончиться... Поэтому все описательные классы перенесем в отдельную папку Models. Внутри файла тоже отразим этот перенос, дописав в обоих файлах в пространстве имен (namespace) новую папку:
namespace wheather_forecast.Models
Носок убрали, теперь помоем полы: для описательных классов, которые впоследствии будут передаваться на сайт, Microsoft советует использовать вместо классов записи (record). Запись - это почти как обычный класс, но экземпляры (объекты) таких записей, в отличие от экземпляров классов, изменять после создания объекта нельзя. Кроме того запись позволяет использовать более короткое описание типа и вместо:
public class Wind
{
public double Speed { get; set; }
public string Direction { get; set; }
}
писать так:
public record Wind(float Speed, string Direction);
Отлично, уже лучше. Осталось изменить немного контроллер, чтобы в нем отразить ранее проведенные изменения, а также очистить его от лишних строк.
Во-первых, удалим массив Summaries.
Во-вторых, дадим знать контроллеру, где теперь лежат сведения о погоде. Для этого в using укажем "путь" к папке с записями: using wheather_forecast.Models;
В-третьих, изменим метод с погодой так, чтобы он отдавал один погодный факт:
public WeatherForecast Get()
и использовал в своей работе созданные нами записи:
return new WeatherForecast(Date: new DateTime(2021, 4, 24),
City: "Tula",
TemperatureC: 1.7,
Humidity: 98,
Pressure: 737,
Clouds: "Значительная облачность",
Wind: new Wind(3, "северный")
);
Теперь можно запустить программу и проверить, что данные отдаются уже более понятные и предсказуемые. Что ж, на сегодня, наверное, хватит. Пора пойти и полежать)
P.S. Исходный код доступен все там же: т.е. тут.