AspNet Core с Angular - Нужно ли создавать дубликаты всех объектов? - PullRequest
1 голос
/ 25 апреля 2019

Я пытаюсь изучить Angular с помощью Aspnet Core и смотрю на проект, созданный по умолчанию в шаблоне Visual Studio 2017 по умолчанию.

Контроллер объявляет класс WeatherForecast и возвращает IEnumerable<WeatherForecast> -

[HttpGet("[action]")]
public IEnumerable<WeatherForecast> WeatherForecasts()
{
    var rng = new Random();
    return Enumerable.Range(1, 5).Select(index => new WeatherForecast
    {
        DateFormatted = DateTime.Now.AddDays(index).ToString("d"),
        TemperatureC = rng.Next(-20, 55),
        Summary = Summaries[rng.Next(Summaries.Length)]
    });
}

public class WeatherForecast
{
    public string DateFormatted { get; set; }
    public int TemperatureC { get; set; }
    public string Summary { get; set; }

    public int TemperatureF
    {
        get
        {
            return 32 + (int)(TemperatureC / 0.5556);
        }
    }
}

И затем угловой компонент, который вызывает вышеуказанный код и отображает IEnumerable<WeatherForecast>, находится ниже -

export class FetchDataComponent
{
    public forecasts: WeatherForecast[];

    constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string) {
    http.get<WeatherForecast[]>(baseUrl + 'api/SampleData/WeatherForecasts')
        .subscribe(result =>{ this.forecasts = result; }, error => console.error(error));
}

interface WeatherForecast
{
    dateFormatted: string;
    temperatureC: number;
    temperatureF: number;
    summary: string;
}

Как вы заметили, класс WeatherForecast объявляется дважды - один раз в бэкэнде .net, а затем снова в угловом компоненте!

У меня вопрос: при работе с AspetCore и Angular всегда ли нам нужно объявлять все сущности (или ViewModels, в зависимости от того, что применимо) как WeatherForecast class дважды? Если да, то это похоже на многократное дублирование усилий и, вероятно, нарушение режима СУХОЙ?

1 Ответ

1 голос
/ 25 апреля 2019

У вас нет выбора. AspNetCore и Angular - это две разные среды, которые используют два разных языка (C # и TypeScript). Даже если Visual Studio предлагает вам возможность создать 1 решение для обоих проектов, вы должны рассматривать ваш проект AspNetCore и ваш проект Angular как две отдельные системы. Не забывайте, что ваш AspNetCore API может обслуживать не только ваш Angular-проект, но и других HTTP-клиентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...