ASP.NET MVC ViewModel с методами - это «законно»? - PullRequest
22 голосов
/ 18 июля 2011

Должны ли модели представления быть ограничены только свойствами, а не методами?

Допустим, у меня есть переключатель в моем представлении, и он хочет узнать, должна ли быть включена кнопка-переключатель.

Я мог бы сделать это полностью в моем представлении:

@Html.RadioButton("radiobuttonName", "The value", (id == Model.PersonId)) 

или я мог бы переместить эту логику в модель представления:

@Html.RadioButton("radiobuttonName", "The value", Model.IsChecked(id)

, используя этот метод в модели представления:

    public int PersonId { get;set;}
    public bool IsChecked(int id)
    {
        return (id == PersonId);
    }

Это нормально делать, или это должно быть сделано целиком в виде, или каким-либо другим способом?

Ответы [ 2 ]

13 голосов
/ 18 июля 2011

Вы можете иметь методы в вашем ViewModel.Если это единственный результат, который вы хотите вычислять каждый раз, тогда я бы предложил добавить код оценки к вашему Controller и сохранить результат в ViewModel, но если вам нужно оценивать вещи, используя метод более динамично и свойствоне могу сделать это для вас, тогда, вероятно, все в порядке с ViewModel.

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

4 голосов
/ 18 июля 2011

Это действительно хороший вопрос относительно правильного размещения логики.Ваш подход, безусловно, законный - но соответствует ли он духу MVC?:)

Я бы сказал, что это зависит от того, применима ли логика в вашем методе только к этой View / ViewModel или может быть потенциально применена к другим ViewModel, которые имеют дело с этим базовым типом модели (в вашем случае, Person ).

Если это однократный расчет для целей данной конкретной модели представления, сохраните его в модели.Если этот расчет можно использовать для объектов Person в целом, рассмотрите возможность использования статического класса Service, например, PersonService, и разместите там свои методы.

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