Должен ли веб-сервис вызываться внутри класса Model в среде MVC? - PullRequest
3 голосов
/ 17 февраля 2012

Предположим, у меня есть веб-сервис WCF, который может извлекать коллекцию <Person> объектов. У меня вопрос, где я должен разместить код для вызова веб-службы, контроллера или модели? Мой второй вопрос: должен ли я также создать свой собственный класс <Person> в папке модели или просто использовать класс, автоматически сгенерированный при добавлении ссылки на службу в проекте .NET?

Ответы [ 3 ]

3 голосов
/ 17 февраля 2012

Обычно для загрузки данных контроллер использует сервис WCF, который иногда также может быть моделью. В более сложных приложениях вам, вероятно, понадобится что-то, чтобы преобразовать то, что WCF возвращает (объекты передачи данных) в ваши Модели, что на самом деле находится за пределами шаблона «MVC».


Возможно, вы захотите просмотреть пример Nerd Dinner и посмотреть, как у них организован код. Он был задуман как реальный пример довольно хорошо структурированного приложения MVC3.

У Хансельмана также есть сводный обзор пары разных форков NerdDinner, которые использовали разные стили доступа к данным в своем блоге .


Фрагмент кода для @ Splash-X

То, что я пытался донести до моего комментария «не является частью шаблона MVC», было то, что иногда DataModel (что возвращает DB или WCF) не совпадает с ViewModel (который вы отправляете в View) так что иногда вам может понадобиться что-то для перевода между моделями, например:

public interface ITransformer<out To, in From>
    where To : class
{
    To Transform(From instance);
}

public class SomeDataToSomeViewModelTransformer : ITransformer<SomeViewModel, SomeDataModel>
{
    public SomeViewModel Transform(SomeDataModel instance)
    {
        return new SomeViewModel
            {
                InvitationId = instance.Id,
                Email = instance.EmailAddress,
                GroupId = instance.Group.Id
            };
    }
}

Любой мой комментарий имел в виду, что вещь, «трансформирующаяся» между моделями, не продиктована паттерном MVC. Или, в более общем смысле, не думайте, что только потому, что вы следуете MVC, это означает, что вы можете только иметь 3 типа классов. Не все является моделью, представлением или контроллером. Контроллер может и будет использовать другие классы, которые не предписаны самим шаблоном MVC.

Это все, что я имел в виду под моим комментарием. Опять же, я понимаю, что это было не самое лучшее замечание. К сожалению.

0 голосов
/ 17 февраля 2012

Это действительно зависит от того, что вы хотите сделать с данными после их извлечения.

Если вы планируете поместить их в базу данных, это не должно происходить ни в контроллере, ни в модели., но на более низком уровне.

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

0 голосов
/ 17 февраля 2012

Вызов WCF из Controler - это правда.Если вы называете Сервисная модель, которая зависит от вашей модели, это не очень хорошо для MVC.Модели не должны зависеть от сервиса.Звонок с контроллера лучший выбор

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