ASP.NET MVC ViewModel с методами - это "законно"?
Если видимые модели ограничены только свойствами, а не методами?
Скажем, у меня есть радиокнопка на мой взгляд и вы хотите проверить, следует ли проверять радиокнопку.
Я мог бы сделать это полностью на мой взгляд:
@Html.RadioButton("radiobuttonName", "The value", (id == Model.PersonId))
или я мог бы переместить эту логику в viewmodel:
@Html.RadioButton("radiobuttonName", "The value", Model.IsChecked(id)
используя этот метод в viewmodel:
public int PersonId { get;set;}
public bool IsChecked(int id)
{
return (id == PersonId);
}
Это нормально делать, или это должно быть сделано полностью в представлении или каким-либо другим способом?
Ответы
Ответ 1
Вы можете иметь методы в вашей ViewModel
. Если это единственный результат, который вы хотите вычислять каждый раз, тогда я бы предложил добавить код оценки в ваш Controller
и вместо этого сохранить результат в ViewModel
но если вам нужно оценивать вещи, используя метод более динамически, а свойство не может это сделать это для вас тогда делать это во ViewModel
, вероятно, хорошо.
В приведенном выше примере я бы порекомендовал сделать это в ViewModel
как тогда ViewModel
содержит логику в одном месте, а не многократно копировать и вставлять в ваш View
.
Ответ 2
Это действительно хороший вопрос относительно правильного размещения логики. Ваш подход, безусловно, легален, но придерживается ли он принципа MVC?:)
Я бы сказал, что это зависит от того, применяется ли логика в вашем методе только к этой View/ViewModel или может быть потенциально применена к другим ViewModels, которые имеют дело с этим базовым типом модели (в вашем случае Person).
Если это одноразовый расчет для этой конкретной модели ViewModel, сохраните ее в модели. Если этот расчет может использоваться для объектов Person в целом, рассмотрите возможность использования статического класса службы, например. PersonService
и разместите там свои методы.