Обычно для загрузки данных контроллер использует сервис 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.
Это все, что я имел в виду под моим комментарием. Опять же, я понимаю, что это было не самое лучшее замечание. К сожалению.