Наличие хранилища непосредственно в модели представления - PullRequest
1 голос
/ 29 декабря 2011

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

Вот пример для модели представления «пост»:

Контроллер:

public ActionResult Details(string slug)
{
    var model = new PostDetailsViewModel(UnitOfWork, slug);         
    return View(model);
}

Модель представления:

public PostDetailsViewModel(IUnitOfWork unitOfWork, string slug)
    {
        _repository = new PostRepository(unitOfWork);
        Post = _repository.FindBySlug(slug);
    }

Репозиторий:

    public Post FindBySlug(string slug)
    {
        return FindAll().SingleOrDefault(x => x.Slug == slug);
    }

Как видите, экземпляр создается непосредственно в модели представления (в конструкторе).Это правильный путь?

Обычно я использовал бизнес-уровень и, в конечном итоге, такой сервисный уровень: Контроллер >> Бизнес >> Репозиторий

Спасибо за ваш совет.

1 Ответ

2 голосов
/ 29 декабря 2011

Это правильный путь?

Не кажется мне правильным способом.Обычно вы можете сделать это доступ к хранилищу в модели, а не в модели представления.Также у них, кажется, есть свойство Post в модели представления.Поэтому они ссылаются на модель предметной области в модели представления, чего я бы не сделал.

Что касается жесткого кодирования конкретной реализации хранилища в конструкторе, ну, если вам все равнокак слабая связь между слоями, возможность повторного использования, техническое обслуживание, модульное тестирование, ... вы можете сделать это.Никто не может убедить нас в том, что IoC всегда следует выполнять.У него есть свои плюсы и минусы.

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