Это хорошая практика для вызова метода из модели в ASP.NET MVC - PullRequest
0 голосов
/ 07 августа 2011

Раньше, когда я писал свой код, я всегда предполагал, что модель должна просто состоять из набора автоматических свойств, заполняемых контроллером.Но недавно я наткнулся на такой код и хочу знать, действителен ли он для MVC:

public class SomeModel
{

    public BusinessInfo BusinessInfo { get; set; }
    public IList<BusinessService> BusinessServices { get; set; }
    public IList<BusinessHour> BusinessHours { get; set; }


    public BusinessService GetBusinessServiceByServiceId(int serviceId)
    {
        return BusinessServices.FirstOrDefault(businessService =>
                        businessService.Service.ServiceId == serviceId);
    }
} 

Допустим ли в этом случае такой метод, как GetBusinessServiceByServiceId?1007 * Эта модель используется в качестве строго типизированной модели для страницы ASP.NET MVC, поэтому она по существу действует как ViewModel

Ответы [ 3 ]

1 голос
/ 07 августа 2011

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

Одной из целей паттерна MVC (IMO) было оставить как можно больше логики в действиях контроллера.

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

РЕДАКТИРОВАТЬ : например, может быть, в вашем примере лучше было бы изменить IList BusinessServices внутри вашей ViewModel на словарь

1 голос
/ 07 августа 2011

Я бы сказал нет.Если для ViewModel требуется объект BusinessService, ему следует присвоить Controller;поиск объекта BusinessService по его идентификатору - это работа класса Repository, а не ViewModel.Кроме того, в данном примере BusinessServices должен быть вставлен в Controller в его конструкторе и доступен через интерфейс, а не статически;Пример кода, который у вас есть, будет довольно сложно протестировать.

Я лично использую ViewModels в качестве держателей данных, содержащих данные модели и свойства, указывающие, должны ли View отображать определенные элементы.

0 голосов
/ 07 августа 2011

Да, это вполне допустимо и распространено иметь методы в ваших классах Model.

Возможно, вы думаете о других типах классов.Например, в большинстве случаев у ViewModels есть только свойства, но нет (или очень мало) методов.

Классы, которые имеют только свойства и не имеют методов, обычно называются DTO для «Объектов передачи данных», и модели, безусловно, не попадают в эту категорию.

...