Передача параметра в перегруженный конструктор ViewModel - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть создатель модели представления в моем контроллере, и я задаюсь вопросом - как мне это упростить?Я думал о переносе этого кода в мою модель представления и создании перегруженного конструктора, который заполнил бы его, но правильно ли передавать параметры в модель представления?Насколько я знаю, я должен избегать передачи параметров в модель представления.Или это нормально, когда мы говорим о перегруженном конструкторе?

public CountryViewModel CreateViewModel(List<Country> countries)
    {
        CountryViewModel flags = new CountryViewModel();

        flags.Countries = countries;
        flags.CountriesCount = countries.Count;
        flags.EuropeanCountriesCount = countryService.GetContinentCount("Europe", countries);
        flags.AsianCountriesCount = countryService.GetContinentCount("Asia", countries);
        flags.AfricanCountriesCount = countryService.GetContinentCount("Africa", countries);
        flags.SAmericanCountriesCount = countryService.GetContinentCount("South America", countries);
        flags.NAmericanCountriesCount = countryService.GetContinentCount("North America", countries);
        flags.AustralianCountriesCount = countryService.GetContinentCount("Australia", countries);
        flags.CountriesArea = countryService.GetCountriesArea(countries).ToString("N0");
        flags.CountriesPercent = countryService.CountCountriesPercent(flags.CountriesCount);
        flags.CountriesAreaPercent = countryService.CountCountriesAreaPercent(countryService.GetCountriesArea(countries));
        flags.ShareLink = "?id=" + sharingService.GenerateGuid();

        return flags;
    }

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Я бы порекомендовал не помещать это в модель представления.Ваш код вызывает различные службы и объединяет результаты.Это логика оркестровки и, по возможности, принадлежит либо к контроллеру, либо к другой службе.

0 голосов
/ 26 декабря 2018

Я бы использовал метод расширения, чтобы выполнить перевод модели, пусть код будет упрощен вместо перегруженного конструктора.

public static class ViewModelExtension{

    public static CountryViewModel CreateViewModel(this List<Country> countries){

        var countryService = new CountryService();

        CountryViewModel flags = new CountryViewModel();
        flags.Countries = countries;
        flags.CountriesCount = countries.Count;
        flags.EuropeanCountriesCount = countryService.GetContinentCount("Europe", countries);
        flags.AsianCountriesCount = countryService.GetContinentCount("Asia", countries);
        flags.AfricanCountriesCount = countryService.GetContinentCount("Africa", countries);
        flags.SAmericanCountriesCount = countryService.GetContinentCount("South America", countries);
        flags.NAmericanCountriesCount = countryService.GetContinentCount("North America", countries);
        flags.AustralianCountriesCount = countryService.GetContinentCount("Australia", countries);
        flags.CountriesArea = countryService.GetCountriesArea(countries).ToString("N0");
        flags.CountriesPercent = countryService.CountCountriesPercent(flags.CountriesCount);
        flags.CountriesAreaPercent = countryService.CountCountriesAreaPercent(countryService.GetCountriesArea(countries));
        flags.ShareLink = "?id=" + sharingService.GenerateGuid();

        return flags;
    }
}

используйте в контроллере как это.

var viewModel = countries.CreateViewModel();

ИлиИначе, вы можете попытаться использовать automapper , этот фреймворк мощен для передачи данных между классами.

...