Вопрос

Кто несет ответственность


Кто несет ответственность за начало и завершение единицы работы в архитектуре MVC?

Это было полезно?

Решение

Это не обязанность контролера, это нарушает рекомендуемая розничная цена.Контролер вообще не должен знать об UoW.В сети обычно используется один UoW на запрос к серверу.В этом случае UoW должен располагаться в конце запроса и запускаться где-то после начала запроса (в идеале запуск UoW должен быть ленивым).Лучшее место для этого — Global.asax (или ваш класс HttpApplication) с использованием обработчиков Application_EndRequest и Application_BeginRequest.
Этого можно легко добиться с помощью структуры IOC (мой любимый — Windsor), см. этот вопрос для получения подробной информации о реализации.

Другие советы

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

Я верю в слабосвязанную архитектуру.Мой контроллер НИЧЕГО не знает о репозитории, контексте или единице работы.Я создал уровень обслуживания (не уверен, что это правильный термин), который вызывает контроллер.Затем эта служба работает с репозиторием (dll), чтобы сохранить все данные.

Как сказал Зихотки, вы нарушите SRP, если возложите эту ответственность на контролера.Это шаблон, ориентированный на манипулирование данными, и поэтому он не должен вызывать беспокойства у контроллера...это приведет к двум нарушениям:один для SRP и другой для принципа SoC.

Что касается того, кто несет ответственность, это должно определяться вашей архитектурой.Предложение StartRequest/EndRequest кажется достаточно убедительным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top