MVC: Репозиторий и Viewmodels оба паттерна вместе для лучшей структуры? - PullRequest
3 голосов
/ 19 февраля 2012

Если я хочу объединить использование репозиториев для каждой сущности и Viewmodels для представления, как это работает?

Какие-нибудь советы на сайте я мог бы посмотреть? Маби, кто-нибудь может привести простой пример?

Спасибо

С наилучшими пожеланиями!

Ответы [ 3 ]

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

Мне нравится следующая структура (из знаменитой серии ASP.NET MVC Стивена Сандерсона Pro ):

Проект домена (Business Logic):

  • Абстрактная папка (интерфейсы репозитория)
  • Конкретная папка (реализации репозитория)
  • Объекты (сгенерированные EF классы)

Веб-интерфейс пользователяПроект (MVC Web App):

  • Модели (просмотр моделей)
  • Представления
  • Контроллеры
  • и т. Д., Вы получите точку

Главное, что вы отделяете свою бизнес-логику (которая должна содержать ваши репозитории) от вашего веб-интерфейса (проект MVC)

В этом сценарии ссылка на классы вашего контроллераслой домена и используйте DI / IoC для вызова правильного экземпляра хранилища.

Пример класса контроллера:

namespace MyMvcProject
{
    using System.Whatever;
    using MyDomainLayer;

    public class MyController : Controller
    {
        private readonly IMyRepository _myRepository;

        public MyController(IMyRepository myRepository)
        {
            // Resolved using your favorite DI/IoC Container:
            this._myRepository = myRepository;
        }

        public ActionResult DoSomething()
        {
            var stuff = _myRepository.GetStuff();
            return View(stuff);
        }
    }
}
2 голосов
/ 19 февраля 2012

Используйте AutoMapper для копирования данных из сущностей в модели и наоборот.Это сократит количество «слесарного» кода, который вам придется написать иначе.

0 голосов
/ 13 марта 2012

Я не профессиональный разработчик, но я думаю, что модель Стива Сандерсона не подходит для некоторых проектов, потому что вы работаете в своих взглядах на модель напрямую. Что произойдет, если вы хотите показать только несколько свойств, а не все? Ваша полная модель путешествует в представлении.

Я думаю, что ваши представления должны работать с классами viewmodel, а не напрямую с моделью, исходящей из orm (через репозиторий и т. Д.)

Единственная проблема, которую я обнаружил, - это процесс отображения между моделью для viewmodel и viewmodel для модели. Позвольте мне объяснить ...

Я пытался сделать это отображение с помощью automp, направление между моделью -> viewmodel работает нормально, но в другом направлении (viewmodel to model) я не нахожу способ сделать это автоматически, потому что viewmodel, как правило, делает не владеют всеми свойствами, которые имеет модель, и если вы выполняете автоматическое моделирование объекта, многие свойства остаются пустыми. Наконец, вам нужно всегда делать ручные отображения.

Идеи для этой ситуации могут приветствоваться. Спасибо

...